summaryrefslogtreecommitdiff
path: root/src/i18n/translate.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/i18n/translate.ts')
-rw-r--r--src/i18n/translate.ts17
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);
};
}