2024-09-21 17:59:16 +02:00
|
|
|
import type {
|
|
|
|
LanguageTag as LanguageTag_defaultSet,
|
|
|
|
MessageKey as MessageKey_defaultSet
|
2024-09-21 21:39:08 +02:00
|
|
|
} from "../messages_defaultSet/types";
|
2024-09-21 17:59:16 +02:00
|
|
|
import { type ReturnTypeOfCreateGetI18n, createGetI18n } from "./getI18n";
|
2024-09-15 16:55:18 +02:00
|
|
|
|
2024-09-21 23:21:15 +02:00
|
|
|
export type I18nBuilder<
|
2024-09-15 16:55:18 +02:00
|
|
|
ThemeName extends string = never,
|
|
|
|
MessageKey_themeDefined extends string = never,
|
|
|
|
LanguageTag_notInDefaultSet extends string = never,
|
|
|
|
ExcludedMethod extends
|
|
|
|
| "withThemeName"
|
|
|
|
| "withExtraLanguages"
|
|
|
|
| "withCustomTranslations" = never
|
|
|
|
> = Omit<
|
|
|
|
{
|
2024-09-21 23:21:15 +02:00
|
|
|
withThemeName: <ThemeName extends string>() => I18nBuilder<
|
2024-09-15 16:55:18 +02:00
|
|
|
ThemeName,
|
|
|
|
MessageKey_themeDefined,
|
|
|
|
LanguageTag_notInDefaultSet,
|
|
|
|
ExcludedMethod | "withThemeName"
|
|
|
|
>;
|
|
|
|
withExtraLanguages: <
|
|
|
|
LanguageTag_notInDefaultSet extends string
|
|
|
|
>(extraLanguageTranslations: {
|
2024-09-21 21:33:04 +02:00
|
|
|
[LanguageTag in LanguageTag_notInDefaultSet]: {
|
|
|
|
label: string;
|
|
|
|
getMessages: () => Promise<{
|
|
|
|
default: Record<MessageKey_defaultSet, string>;
|
|
|
|
}>;
|
|
|
|
};
|
2024-09-21 23:21:15 +02:00
|
|
|
}) => I18nBuilder<
|
2024-09-15 16:55:18 +02:00
|
|
|
ThemeName,
|
|
|
|
MessageKey_themeDefined,
|
|
|
|
LanguageTag_notInDefaultSet,
|
|
|
|
ExcludedMethod | "withExtraLanguages"
|
|
|
|
>;
|
|
|
|
withCustomTranslations: <MessageKey_themeDefined extends string>(
|
|
|
|
messagesByLanguageTag_themeDefined: Partial<{
|
|
|
|
[LanguageTag in
|
|
|
|
| LanguageTag_defaultSet
|
|
|
|
| LanguageTag_notInDefaultSet]: Record<
|
|
|
|
MessageKey_themeDefined,
|
|
|
|
string | Record<ThemeName, string>
|
|
|
|
>;
|
|
|
|
}>
|
2024-09-21 23:21:15 +02:00
|
|
|
) => I18nBuilder<
|
2024-09-15 16:55:18 +02:00
|
|
|
ThemeName,
|
|
|
|
MessageKey_themeDefined,
|
|
|
|
LanguageTag_notInDefaultSet,
|
|
|
|
ExcludedMethod | "withCustomTranslations"
|
|
|
|
>;
|
2024-09-21 23:21:15 +02:00
|
|
|
build: () => ReturnTypeOfCreateGetI18n<
|
2024-09-15 16:55:18 +02:00
|
|
|
MessageKey_themeDefined,
|
|
|
|
LanguageTag_notInDefaultSet
|
|
|
|
>;
|
|
|
|
},
|
|
|
|
ExcludedMethod
|
|
|
|
>;
|
|
|
|
|
2024-09-21 23:21:15 +02:00
|
|
|
function createI18nBuilder<
|
2024-09-15 16:55:18 +02:00
|
|
|
ThemeName extends string = never,
|
|
|
|
MessageKey_themeDefined extends string = never,
|
|
|
|
LanguageTag_notInDefaultSet extends string = never
|
|
|
|
>(params: {
|
|
|
|
extraLanguageTranslations: {
|
2024-09-21 21:33:04 +02:00
|
|
|
[LanguageTag in LanguageTag_notInDefaultSet]: {
|
|
|
|
label: string;
|
|
|
|
getMessages: () => Promise<{
|
|
|
|
default: Record<MessageKey_defaultSet, string>;
|
|
|
|
}>;
|
|
|
|
};
|
2024-09-15 16:55:18 +02:00
|
|
|
};
|
|
|
|
messagesByLanguageTag_themeDefined: Partial<{
|
|
|
|
[LanguageTag in LanguageTag_defaultSet | LanguageTag_notInDefaultSet]: Record<
|
|
|
|
MessageKey_themeDefined,
|
|
|
|
string | Record<ThemeName, string>
|
|
|
|
>;
|
|
|
|
}>;
|
2024-09-21 23:21:15 +02:00
|
|
|
}): I18nBuilder<ThemeName, MessageKey_themeDefined, LanguageTag_notInDefaultSet> {
|
|
|
|
const i18nBuilder: I18nBuilder<
|
2024-09-15 16:55:18 +02:00
|
|
|
ThemeName,
|
|
|
|
MessageKey_themeDefined,
|
|
|
|
LanguageTag_notInDefaultSet
|
|
|
|
> = {
|
|
|
|
withThemeName: () =>
|
2024-09-21 23:21:15 +02:00
|
|
|
createI18nBuilder({
|
2024-09-15 16:55:18 +02:00
|
|
|
extraLanguageTranslations: params.extraLanguageTranslations,
|
|
|
|
messagesByLanguageTag_themeDefined:
|
|
|
|
params.messagesByLanguageTag_themeDefined as any
|
|
|
|
}),
|
|
|
|
withExtraLanguages: extraLanguageTranslations =>
|
2024-09-21 23:21:15 +02:00
|
|
|
createI18nBuilder({
|
2024-09-15 16:55:18 +02:00
|
|
|
extraLanguageTranslations,
|
|
|
|
messagesByLanguageTag_themeDefined:
|
|
|
|
params.messagesByLanguageTag_themeDefined as any
|
|
|
|
}),
|
|
|
|
withCustomTranslations: messagesByLanguageTag_themeDefined =>
|
2024-09-21 23:21:15 +02:00
|
|
|
createI18nBuilder({
|
2024-09-15 16:55:18 +02:00
|
|
|
extraLanguageTranslations: params.extraLanguageTranslations,
|
|
|
|
messagesByLanguageTag_themeDefined
|
|
|
|
}),
|
2024-09-21 23:21:15 +02:00
|
|
|
build: () =>
|
2024-09-15 16:55:18 +02:00
|
|
|
createGetI18n({
|
|
|
|
extraLanguageTranslations: params.extraLanguageTranslations,
|
|
|
|
messagesByLanguageTag_themeDefined:
|
|
|
|
params.messagesByLanguageTag_themeDefined
|
|
|
|
})
|
|
|
|
};
|
|
|
|
|
2024-09-21 23:08:45 +02:00
|
|
|
return i18nBuilder;
|
2024-09-15 16:55:18 +02:00
|
|
|
}
|
|
|
|
|
2024-09-21 23:21:15 +02:00
|
|
|
export const i18nBuilder = createI18nBuilder({
|
2024-09-21 04:45:00 +02:00
|
|
|
extraLanguageTranslations: {},
|
|
|
|
messagesByLanguageTag_themeDefined: {}
|
|
|
|
});
|