2024-09-21 17:59:16 +02:00
|
|
|
import type {
|
|
|
|
LanguageTag as LanguageTag_defaultSet,
|
|
|
|
MessageKey as MessageKey_defaultSet
|
|
|
|
} from "../messages_defaultSet/types";
|
|
|
|
import { type ReturnTypeOfCreateUseI18n, createUseI18n } from "../withJsx/useI18n";
|
2024-09-15 16:55:18 +02:00
|
|
|
|
|
|
|
export type I18nInitializer<
|
|
|
|
ThemeName extends string = never,
|
|
|
|
MessageKey_themeDefined extends string = never,
|
|
|
|
LanguageTag_notInDefaultSet extends string = never,
|
|
|
|
ExcludedMethod extends
|
|
|
|
| "withThemeName"
|
|
|
|
| "withExtraLanguages"
|
|
|
|
| "withCustomTranslations" = never
|
|
|
|
> = Omit<
|
|
|
|
{
|
|
|
|
withThemeName: <ThemeName extends string>() => I18nInitializer<
|
|
|
|
ThemeName,
|
|
|
|
MessageKey_themeDefined,
|
|
|
|
LanguageTag_notInDefaultSet,
|
|
|
|
ExcludedMethod | "withThemeName"
|
|
|
|
>;
|
|
|
|
withExtraLanguages: <
|
|
|
|
LanguageTag_notInDefaultSet extends string
|
|
|
|
>(extraLanguageTranslations: {
|
2024-09-21 04:45:00 +02:00
|
|
|
[LanguageTag in LanguageTag_notInDefaultSet]: () => Promise<{
|
|
|
|
default: Record<MessageKey_defaultSet, string>;
|
|
|
|
}>;
|
2024-09-15 16:55:18 +02:00
|
|
|
}) => I18nInitializer<
|
|
|
|
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>
|
|
|
|
>;
|
|
|
|
}>
|
|
|
|
) => I18nInitializer<
|
|
|
|
ThemeName,
|
|
|
|
MessageKey_themeDefined,
|
|
|
|
LanguageTag_notInDefaultSet,
|
|
|
|
ExcludedMethod | "withCustomTranslations"
|
|
|
|
>;
|
2024-09-21 17:59:16 +02:00
|
|
|
create: () => ReturnTypeOfCreateUseI18n<
|
2024-09-15 16:55:18 +02:00
|
|
|
MessageKey_themeDefined,
|
|
|
|
LanguageTag_notInDefaultSet
|
|
|
|
>;
|
|
|
|
},
|
|
|
|
ExcludedMethod
|
|
|
|
>;
|
|
|
|
|
|
|
|
function createI18nInitializer<
|
|
|
|
ThemeName extends string = never,
|
|
|
|
MessageKey_themeDefined extends string = never,
|
|
|
|
LanguageTag_notInDefaultSet extends string = never
|
|
|
|
>(params: {
|
|
|
|
extraLanguageTranslations: {
|
2024-09-21 04:45:00 +02:00
|
|
|
[LanguageTag in LanguageTag_notInDefaultSet]: () => 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>
|
|
|
|
>;
|
|
|
|
}>;
|
|
|
|
}): I18nInitializer<ThemeName, MessageKey_themeDefined, LanguageTag_notInDefaultSet> {
|
|
|
|
const i18nInitializer: I18nInitializer<
|
|
|
|
ThemeName,
|
|
|
|
MessageKey_themeDefined,
|
|
|
|
LanguageTag_notInDefaultSet
|
|
|
|
> = {
|
|
|
|
withThemeName: () =>
|
|
|
|
createI18nInitializer({
|
|
|
|
extraLanguageTranslations: params.extraLanguageTranslations,
|
|
|
|
messagesByLanguageTag_themeDefined:
|
|
|
|
params.messagesByLanguageTag_themeDefined as any
|
|
|
|
}),
|
|
|
|
withExtraLanguages: extraLanguageTranslations =>
|
|
|
|
createI18nInitializer({
|
|
|
|
extraLanguageTranslations,
|
|
|
|
messagesByLanguageTag_themeDefined:
|
|
|
|
params.messagesByLanguageTag_themeDefined as any
|
|
|
|
}),
|
|
|
|
withCustomTranslations: messagesByLanguageTag_themeDefined =>
|
|
|
|
createI18nInitializer({
|
|
|
|
extraLanguageTranslations: params.extraLanguageTranslations,
|
|
|
|
messagesByLanguageTag_themeDefined
|
|
|
|
}),
|
|
|
|
create: () =>
|
2024-09-21 17:59:16 +02:00
|
|
|
createUseI18n({
|
2024-09-15 16:55:18 +02:00
|
|
|
extraLanguageTranslations: params.extraLanguageTranslations,
|
|
|
|
messagesByLanguageTag_themeDefined:
|
|
|
|
params.messagesByLanguageTag_themeDefined
|
|
|
|
})
|
|
|
|
};
|
|
|
|
|
|
|
|
return i18nInitializer;
|
|
|
|
}
|
|
|
|
|
2024-09-21 04:45:00 +02:00
|
|
|
export const i18nInitializer = createI18nInitializer({
|
|
|
|
extraLanguageTranslations: {},
|
|
|
|
messagesByLanguageTag_themeDefined: {}
|
|
|
|
});
|