mirror of
https://github.com/fluxerapp/fluxer
synced 2026-10-17 21:15:32 +09:00
refactor(i18n): load server catalogs from weblate json (#3378)
This commit is contained in:
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}.');
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user