From b35b6da1974fc63da9ab5578ead911dce0344f33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Marie=20De=20Mey?= Date: Wed, 5 Jun 2024 19:42:07 +0300 Subject: [PATCH] +vue --- README.md | 3 ++- package.json | 2 +- src/client/client.ts | 4 ++-- src/client/helpers.ts | 21 ++++++++++----------- src/client/types.ts | 9 +++++---- test/static.test.ts | 7 ++++--- 6 files changed, 24 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 63d32a5..fb3f153 100644 --- a/README.md +++ b/README.md @@ -174,7 +174,8 @@ error(key: string, error: string, spec: object): string ## Integrations - [SvelteKit](https://github.com/eddow/omni18n-svelte4) - Svelte4 -- [Translator](https://github.com/eddow/omni18n-edit/releases) - To edit `FileDB` dictionaries +- [Nuxt](https://github.com/eddow/omni18n-vue) - Vue3 +- [Translator](https://github.com/eddow/omni18n-edit/releases) - To edit `FileDB` dictionaries and give an idea of "translation page" ## TODO diff --git a/package.json b/package.json index bb9e399..e97b349 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "omni18n", - "version": "1.1.10", + "version": "1.1.11", "exports": { ".": { "browser": { diff --git a/src/client/client.ts b/src/client/client.ts index 569ff3b..08e3915 100644 --- a/src/client/client.ts +++ b/src/client/client.ts @@ -131,7 +131,7 @@ export default class I18nClient implements OmnI18nClient { if (toLoad.length) this.received(toLoad, await this.condense(this.locales, toLoad)) } - async setLocales(locales: Locale[]) { + setLocales(locales: Locale[], partial?: PartialLoad) { locales = removeDuplicates(locales) if ( this.locales.length === locales.length && @@ -143,7 +143,7 @@ export default class I18nClient implements OmnI18nClient { this.loadedZones = new Set() this.dictionary = {} this.internals = {} - await this.loadDefer.defer() + this.loadDefer.defer() } modified(entries: Record) { diff --git a/src/client/helpers.ts b/src/client/helpers.ts index 2d77693..1f8f69b 100644 --- a/src/client/helpers.ts +++ b/src/client/helpers.ts @@ -12,6 +12,14 @@ import { text } from './types' +const untranslatable = { + // Must be un-then-able in order to be awaited + then: undefined, + // Vue reference mechanism + __v_isRef: undefined, + __v_raw: undefined +} + function entry(t: Translation, isFallback?: boolean): ClientDictionary { return { [text]: t, ...(isFallback ? { [fallback]: true } : {}) } } @@ -87,7 +95,9 @@ export function translator(context: TContext): Translator { } const primitive = new Proxy(translation, { get(target, key) { + if (key in untranslatable) return untranslatable[key as keyof typeof untranslatable] switch (key) { + //? case 'toJSON': // Occurs on JSON.stringify case 'toString': case Symbol.toStringTag: case 'valueOf': @@ -96,17 +106,6 @@ export function translator(context: TContext): Translator { return primitive case 'constructor': return String - case 'then': // Must be un-then-able in order to be awaited - return new Proxy( - {}, - { - get(target, p, receiver) { - const msg = 'Translators must be unthenable. `then` cannot be used as a text key.' - if (p === 'toString') return msg - throw new TranslationError(msg) - } - } - ) case contextKey: return context } diff --git a/src/client/types.ts b/src/client/types.ts index 6949a62..8e8e167 100644 --- a/src/client/types.ts +++ b/src/client/types.ts @@ -44,9 +44,10 @@ export class TranslationError extends Error { name = 'TranslationError' } -export type Translator = ((...args: any[]) => string) & { - [k: TextKey]: Translator - [contextKey]: TContext -} +export type Translator = ((...args: any[]) => string) & + string & { + [k: TextKey]: Translator + [contextKey]: TContext + } export type Translatable = { [key: TextKey]: Translatable | string } diff --git a/test/static.test.ts b/test/static.test.ts index 26c1d99..ed70fb2 100644 --- a/test/static.test.ts +++ b/test/static.test.ts @@ -238,10 +238,11 @@ describe('parameters', () => { }) test('change locale', async () => { - const client = new I18nClient(['en-US'], server.condense), - T: Translator = await client.enter() + const client = new I18nClient(['en-US'], server.condense) + let T: Translator = await client.enter() expect(T.msg.greet()).toBe('Hello here') - await client.setLocales(['fr']) + client.setLocales(['fr']) + T = await client.enter() expect(T.msg.greet()).toBe('Salut tout le monde') }) })