diff options
| author | Joe Carstairs <65492573+Sycamost@users.noreply.github.com> | 2023-08-12 17:22:33 +0100 |
|---|---|---|
| committer | Joe Carstairs <65492573+Sycamost@users.noreply.github.com> | 2023-08-12 17:22:33 +0100 |
| commit | e0c5ec43f5c2a105dc3c626d7c4bc74b512662f4 (patch) | |
| tree | 4eabdb4b96e960e83f38b5af3b8407d58beb0220 /src/i18n/translate.ts | |
| parent | b99397f884e41a1018a217c6eb116ed00f922a4f (diff) | |
Parameterises translation
Diffstat (limited to 'src/i18n/translate.ts')
| -rw-r--r-- | src/i18n/translate.ts | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/src/i18n/translate.ts b/src/i18n/translate.ts index b407e3b..b911547 100644 --- a/src/i18n/translate.ts +++ b/src/i18n/translate.ts @@ -1,9 +1,20 @@ import type Locale from '../types/Locale'; -import type { TranslationsDictionary } from '../types/TranslationsDictionary'; +import type { TranslationsDictionary, Translation } from '../types/TranslationsDictionary'; import { defaultLocale } from './locales'; +type TranslationsDictionaryWith<Key extends string, Params> = TranslationsDictionary<{ + [key in Key]: { [locale in typeof defaultLocale]: Translation<Params> } & { + [locale in Locale]?: Translation<Params>; + }; +}>; + export default function (locale: Locale) { - return function <T extends string>(dict: TranslationsDictionary<T>, key: T) { - return dict[key][locale] ?? dict[key][defaultLocale]; + return function < + Key extends string, + Params, + Dict extends TranslationsDictionaryWith<Key, Params>, + >(dict: Dict, params: { key: Key } & { [Param in keyof Params]: string }) { + const translation = dict[params.key][locale] ?? dict[params.key][defaultLocale]; + return translation(params); }; } |
