refactor(i18n): load server catalogs from weblate json (#3378)

This commit is contained in:
Hampus authored and GitHub committed 2026-10-10 22:35:45 +02:00
1 parent d564ca5691
commit 1198b61648
114 files changed
+171 -27595

No files matched your search

@@ -47,27 +47,6 @@ export type MessageVariablesForTemplate<T extends string> = [TemplatePlaceholder
export type MessageArgsForTemplate<T extends string> = [MessageVariablesForTemplate<T>] extends [never]
? [variables?: undefined]
: [variables: MessageVariablesForTemplate<T>];
type LocaleMessageForTemplate<Source extends string, Translation extends string> = [
Exclude<TemplatePlaceholderNames<Source>, TemplatePlaceholderNames<Translation>>,
] extends [never]
? Translation
: never;
type StaticLocaleMessagesForCatalog<
TCatalog extends Record<string, string>,
TMessages extends Partial<Record<keyof TCatalog, string>>,
> = {
readonly [Key in keyof TMessages]: Key extends keyof TCatalog
? TMessages[Key] extends string
? LocaleMessageForTemplate<TCatalog[Key], TMessages[Key]>
: never
: never;
};
export function defineStaticLocaleMessages<TCatalog extends Record<string, string>>() {
return <const TMessages extends Partial<Record<keyof TCatalog, string>>>(
messages: TMessages & StaticLocaleMessagesForCatalog<TCatalog, TMessages>,
): TMessages => messages;
}
function collectMessageTemplateVariables(tokens: ReadonlyArray<Token>, variables: Set<string>): void {
for (const token of tokens) {
@@ -2,7 +2,6 @@
import type {MessageArgsForTemplate, MessageVariablesForTemplate} from '@fluxer/i18n/src/runtime/MessageCatalogTypes';
import {
defineStaticLocaleMessages,
extractMessageTemplatePlaceholders,
extractMessageTemplateVariables,
validateMessageTemplateVariables,
@@ -44,15 +43,4 @@ describe('message catalog type helpers', () => {
expectTypeOf<Args>().toEqualTypeOf<[variables: {userName: string | number | boolean | Date}]>();
expectTypeOf<NoArgs>().toEqualTypeOf<[variables?: undefined]>();
});
it('defines locale messages with source placeholders preserved', () => {
const defineMessages = defineStaticLocaleMessages<{
greeting: 'Hello {userName}.';
count: '{count, plural, one {# item} other {# items}}';
}>();
const messages = defineMessages({
greeting: 'Salut {userName}.',
count: '{count, plural, one {# element} other {# elements}}',
});
expect(messages.greeting).toBe('Salut {userName}.');
});
});