langsys-js-typescript 0.2.3 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +19 -0
- package/README.md +10 -10
- package/dist/index.d.mts +46 -4
- package/dist/index.d.ts +46 -4
- package/dist/index.js +107 -49
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +107 -50
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,22 @@
|
|
|
1
|
+
## 0.3.0 - 2026-07-03
|
|
2
|
+
|
|
3
|
+
Full CLDR compliance, matching the backend's CLDR migration. Everything rides on the platform's native `Intl` APIs — no new dependencies, no bundled locale data.
|
|
4
|
+
|
|
5
|
+
### Changed
|
|
6
|
+
|
|
7
|
+
- **Locale identifiers are now BCP 47 canonical everywhere.** `en-us` → `en-US`, `zh-hant-tw` → `zh-Hant-TW`, `en_US` → `en-US`, legacy aliases resolved (`iw` → `he`). Canonicalization happens at every input boundary (init config, user-locale store emissions, `detectPreferredLocale`, API params), so the canonical form is what goes on the wire and what keys every internal cache. Lowercase locales in existing configs keep working — they're canonicalized on the way in.
|
|
8
|
+
- **`detectPreferredLocale` matching is script-aware** via CLDR likely-subtags (`Intl.Locale.maximize()`). `es-MX` matches a supported `es-ES` or `es`; `zh-TW` matches `zh-Hant` and never `zh-Hans` — cross-script fallbacks are refused instead of guessed. Previously matching truncated to the bare language code, which could hand a Traditional Chinese reader a Simplified catalog.
|
|
9
|
+
- **Simple `{name}` interpolation formats numbers and Dates per the target locale's CLDR rules.** Numbers go through `Intl.NumberFormat` (`1234.5` → `1.234,5` in `de-DE`); Dates through `Intl.DateTimeFormat` medium date style (previously ISO 8601). Pass values as strings to opt out — e.g. IDs that must not get grouping separators.
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
|
|
13
|
+
- **Style-less ICU arguments (`{n, number}`, `{d, date}`, `{t, time}`) now format correctly.** The ICU detector required a style argument, so these valid ICU forms fell through to simple interpolation and rendered as literal `{n, number}` text.
|
|
14
|
+
- Locale equality checks (fetch dedup, country/currency/dial-code caches) no longer miss when the same locale arrives with different casing.
|
|
15
|
+
|
|
16
|
+
### Added
|
|
17
|
+
|
|
18
|
+
- `canonicalizeLocale(locale)` — exported BCP 47 canonicalizer, useful when seeding your own `UserLocaleStore`.
|
|
19
|
+
|
|
1
20
|
## 0.2.1 - 2026-06-11
|
|
2
21
|
|
|
3
22
|
### Changed
|
package/README.md
CHANGED
|
@@ -29,14 +29,14 @@ import { LangsysApp, createSignal, t } from 'langsys-js-typescript';
|
|
|
29
29
|
|
|
30
30
|
// 1. A reactive holder for the user's current locale. Use `createSignal` if you
|
|
31
31
|
// have nothing of your own — any object with subscribe/set/update/get works.
|
|
32
|
-
const userLocale = createSignal('en-
|
|
32
|
+
const userLocale = createSignal('en-US');
|
|
33
33
|
|
|
34
34
|
// 2. Initialize
|
|
35
35
|
const response = await LangsysApp.init({
|
|
36
36
|
projectid: process.env.LANGSYS_PROJECT_ID!,
|
|
37
37
|
key: process.env.LANGSYS_API_KEY!,
|
|
38
38
|
UserLocaleStore: userLocale,
|
|
39
|
-
baseLocale: 'en-
|
|
39
|
+
baseLocale: 'en-US',
|
|
40
40
|
debug: false,
|
|
41
41
|
});
|
|
42
42
|
|
|
@@ -51,7 +51,7 @@ document.querySelector('#greeting')!.textContent =
|
|
|
51
51
|
t('Hello, {name}!', 'Greetings', { name: 'Sarah' });
|
|
52
52
|
|
|
53
53
|
// 5. Change locale — all subscribed consumers re-translate
|
|
54
|
-
userLocale.set('es-
|
|
54
|
+
userLocale.set('es-ES');
|
|
55
55
|
```
|
|
56
56
|
|
|
57
57
|
### How `t()` works
|
|
@@ -68,9 +68,9 @@ t('Hello, {name}!', 'Greetings', {}); // ❌ Property '
|
|
|
68
68
|
t('Hello, {name}!', 'Greetings', { name: 'x', extra: 'y' }); // ❌ Unknown property 'extra'
|
|
69
69
|
```
|
|
70
70
|
|
|
71
|
-
Allowed value types: `string | number | Date | boolean`. Dates
|
|
71
|
+
Allowed value types: `string | number | Date | boolean`. Numbers and Dates format per the active locale's CLDR rules (`1234.5` → `1.234,5` in `de-DE`; Dates use the medium date style). Pass values as strings to opt out — e.g. IDs and codes that must not get grouping separators.
|
|
72
72
|
|
|
73
|
-
>
|
|
73
|
+
> Translations containing ICU MessageFormat syntax — `{count, plural, one {# item} other {# items}}`, `{gender, select, …}`, `{n, number}`, `{d, date}` — are rendered with full CLDR plural rules for the active locale (Arabic's six categories, Russian's four, etc.). Plain `{name}` slots keep working unchanged.
|
|
74
74
|
|
|
75
75
|
#### Categorization disambiguates context
|
|
76
76
|
|
|
@@ -167,9 +167,9 @@ await LangsysApp.init({
|
|
|
167
167
|
projectid: env.LANGSYS_PROJECT_ID,
|
|
168
168
|
key: env.LANGSYS_API_KEY,
|
|
169
169
|
UserLocaleStore: userLocale,
|
|
170
|
-
baseLocale: 'en-
|
|
170
|
+
baseLocale: 'en-US',
|
|
171
171
|
initialTranslations, // fetched on the server
|
|
172
|
-
initialTranslationsLocale: 'es-
|
|
172
|
+
initialTranslationsLocale: 'es-ES',
|
|
173
173
|
ssrTokenStrategy: 'client', // 'client' | 'server' | 'auto'
|
|
174
174
|
});
|
|
175
175
|
```
|
|
@@ -187,7 +187,7 @@ const locale = LangsysApp.detectPreferredLocale();
|
|
|
187
187
|
// SSR — parse Accept-Language header
|
|
188
188
|
const locale = LangsysApp.detectPreferredLocale(req.headers['accept-language']);
|
|
189
189
|
|
|
190
|
-
// Match against your app's supported locales
|
|
190
|
+
// Match against your app's supported locales (script-aware CLDR matching)
|
|
191
191
|
const supported = (await LangsysApp.getLocalesFlat()).map((l) => l.code);
|
|
192
192
|
const locale = LangsysApp.detectPreferredLocale(
|
|
193
193
|
req.headers['accept-language'],
|
|
@@ -195,7 +195,7 @@ const locale = LangsysApp.detectPreferredLocale(
|
|
|
195
195
|
);
|
|
196
196
|
```
|
|
197
197
|
|
|
198
|
-
The matcher tries exact match first (`en-US`), then language-
|
|
198
|
+
The matcher tries an exact match first (`en-US`), then falls back to same-language-and-script matching using CLDR likely-subtags data (`es-MX` matches `es-ES`; `zh-TW` matches `zh-Hant` but never `zh-Hans` — cross-script fallbacks are deliberately refused). All results come back in BCP 47 canonical form (`en-US`, `zh-Hant-TW`). When you pass `supported` and none match, it falls back to the user's top preference (canonicalized); it returns `false` only when no preference can be determined at all.
|
|
199
199
|
|
|
200
200
|
## Localized country / currency / locale lists
|
|
201
201
|
|
|
@@ -204,7 +204,7 @@ const countries = await LangsysApp.getCountries(); // [{ code, label }, ..
|
|
|
204
204
|
const dialCodes = await LangsysApp.getDialCodes(); // [{ country_code, dial_code, name }, ...]
|
|
205
205
|
const currencies = await LangsysApp.getCurrencies(); // [{ code, name, symbol, ... }, ...]
|
|
206
206
|
const locales = await LangsysApp.getLocales(); // { LanguageName: [{ code, name }] }
|
|
207
|
-
const localeName = await LangsysApp.getLocaleNameWithLookup('es-
|
|
207
|
+
const localeName = await LangsysApp.getLocaleNameWithLookup('es-ES', true, 'fr-FR'); // 'espagnol'
|
|
208
208
|
```
|
|
209
209
|
|
|
210
210
|
## The `Signal<T>` primitive
|
package/dist/index.d.mts
CHANGED
|
@@ -358,8 +358,12 @@ declare class LangsysAppClass {
|
|
|
358
358
|
private getUserLanguagePreferences;
|
|
359
359
|
private parseAcceptLanguageHeader;
|
|
360
360
|
private findBestLocaleMatch;
|
|
361
|
-
|
|
362
|
-
|
|
361
|
+
/**
|
|
362
|
+
* Resolve the effective locale for a data-fetching helper: explicit
|
|
363
|
+
* argument, else the user's current locale, else the base locale —
|
|
364
|
+
* always in BCP 47 canonical form so cache keys and API routes agree.
|
|
365
|
+
*/
|
|
366
|
+
private resolveLocale;
|
|
363
367
|
}
|
|
364
368
|
declare const LangsysApp: LangsysAppClass;
|
|
365
369
|
|
|
@@ -371,6 +375,8 @@ interface TranslateOptions {
|
|
|
371
375
|
custom_id?: string;
|
|
372
376
|
/** Optional human-readable label shown in the Translation Manager. */
|
|
373
377
|
label?: string;
|
|
378
|
+
/** Interpolation params — `{name}`, `{count}`, etc. Same single-brace syntax as `t()`. */
|
|
379
|
+
params?: Record<string, ParamPrimitive>;
|
|
374
380
|
}
|
|
375
381
|
/**
|
|
376
382
|
* Wrap a DOM element and manage translation for its contents.
|
|
@@ -395,6 +401,8 @@ declare class Translate {
|
|
|
395
401
|
private custom_id;
|
|
396
402
|
private unsubscribeLocale;
|
|
397
403
|
constructor(element: HTMLElement, options?: TranslateOptions);
|
|
404
|
+
/** Update interpolation params (e.g. a changed count) and re-render. Mirrors `Phrase.setParams`. */
|
|
405
|
+
setParams(params: Record<string, ParamPrimitive> | undefined): void;
|
|
398
406
|
/** Stop reacting to locale changes. Safe to call multiple times. */
|
|
399
407
|
destroy(): void;
|
|
400
408
|
private translateUpdate;
|
|
@@ -402,6 +410,12 @@ declare class Translate {
|
|
|
402
410
|
private handleContentBlock;
|
|
403
411
|
private translate;
|
|
404
412
|
private getTranslation;
|
|
413
|
+
/**
|
|
414
|
+
* Interpolate `{name}`-style params into a resolved text, matching `t()`:
|
|
415
|
+
* unknown keys fall through untouched, and the untranslated fallback is
|
|
416
|
+
* interpolated too. No-op when no params were supplied.
|
|
417
|
+
*/
|
|
418
|
+
private applyParams;
|
|
405
419
|
private translateAttributes;
|
|
406
420
|
private translateAttribute;
|
|
407
421
|
}
|
|
@@ -648,6 +662,8 @@ declare function md5(inputString: string): string;
|
|
|
648
662
|
*
|
|
649
663
|
* - Matches `{var, plural, …}`, `{var, select, …}`, `{var, selectordinal, …}`,
|
|
650
664
|
* `{var, number, …}`, `{var, date, …}`, `{var, time, …}`.
|
|
665
|
+
* - Also matches the style-less forms `{var, number}`, `{var, date}`,
|
|
666
|
+
* `{var, time}` — valid ICU with the locale-default style.
|
|
651
667
|
* - Doesn't match plain interpolation slots like `{name}` or `{count}`.
|
|
652
668
|
*
|
|
653
669
|
* Exported because the Translation Manager UI needs the same detection logic
|
|
@@ -664,7 +680,11 @@ declare function isICU(template: string): boolean;
|
|
|
664
680
|
* etc.) and gender-select branches.
|
|
665
681
|
* - Simple `{name}` interpolation: cheap regex replacement. Unknown
|
|
666
682
|
* placeholders are left untouched so missing data is visible to the
|
|
667
|
-
* developer rather than silently rendering empty strings.
|
|
683
|
+
* developer rather than silently rendering empty strings. Number and
|
|
684
|
+
* Date values are formatted per the target locale's CLDR rules
|
|
685
|
+
* (`Intl.NumberFormat` / `Intl.DateTimeFormat`) — pass numbers as
|
|
686
|
+
* strings to opt out (e.g. IDs and codes that must not get grouping
|
|
687
|
+
* separators).
|
|
668
688
|
*
|
|
669
689
|
* Malformed ICU falls through to simple interpolation rather than throwing,
|
|
670
690
|
* so the developer sees a broken-but-visible string instead of a runtime crash.
|
|
@@ -676,6 +696,28 @@ declare function isICU(template: string): boolean;
|
|
|
676
696
|
*/
|
|
677
697
|
declare function interpolate(template: string, params: Record<string, unknown>, locale?: string): string;
|
|
678
698
|
|
|
699
|
+
/**
|
|
700
|
+
* Locale-identifier handling, CLDR/BCP 47 flavored. Everything here rides on
|
|
701
|
+
* the platform's native `Intl` — no bundled locale data.
|
|
702
|
+
*
|
|
703
|
+
* The SDK's convention: canonicalize once at every input boundary (init
|
|
704
|
+
* config, user-locale store emissions, detectPreferredLocale, API routes) and
|
|
705
|
+
* treat the canonical string as the identity everywhere downstream — cache
|
|
706
|
+
* keys, equality checks, and the wire format all use it.
|
|
707
|
+
*/
|
|
708
|
+
/**
|
|
709
|
+
* Canonicalize a locale identifier to BCP 47 canonical form (the form CLDR
|
|
710
|
+
* data is keyed by): language lowercase, script Titlecase, region uppercase —
|
|
711
|
+
* `en-us` → `en-US`, `zh-hant-tw` → `zh-Hant-TW`. Underscores are accepted
|
|
712
|
+
* and converted (`en_US` → `en-US`). Legacy aliases are resolved (`iw` → `he`,
|
|
713
|
+
* `in` → `id`).
|
|
714
|
+
*
|
|
715
|
+
* Structurally invalid tags fall back to best-effort manual casing rather
|
|
716
|
+
* than throwing, so a bad config value degrades to a failed catalog lookup
|
|
717
|
+
* instead of a crash.
|
|
718
|
+
*/
|
|
719
|
+
declare function canonicalizeLocale(locale: string): string;
|
|
720
|
+
|
|
679
721
|
interface iProject {
|
|
680
722
|
id: string;
|
|
681
723
|
owner_id: string;
|
|
@@ -696,4 +738,4 @@ interface iProject {
|
|
|
696
738
|
declare const t: TFunction;
|
|
697
739
|
declare const tSignal: Signal<TFunction>;
|
|
698
740
|
|
|
699
|
-
export { type EncodedRichText, type ExtractParamKeys, LangsysApp, LangsysAppAPI, type LocaleSource, Logger, PHRASE_MARKER_ATTR, type ParamPrimitive, type ParamsFor, Phrase, type PhraseOptions, type RichSlot, type Signal, type Subscriber, type TArgs, type TFunction, Translate, type TranslateOptions, type TranslationParams, Translations, type Unsubscriber, type Updater, createSignal, currentlyLoadedLocale, encodeRichText, generateCustomId, getValue, type iCategories, type iContentBlock, type iCountry, type iCountryDialCode, type iCountryList, type iCurrency, type iCurrencyList, type iLangsysConfig, type iLangsysInitConfig, type ResponseObject as iLangsysResponse, type iLanguageName, type iLocaleData, type iLocaleDefault, type iLocaleFlat, type iProject, type iTranslations, interpolate, isContentBlockKnown, isEmpty, isICU, logger, markupTokenValues, md5, persist, reconstitute, registerContentBlock, sTranslations, stripSentinels, t, tSignal, tokenizeElement };
|
|
741
|
+
export { type EncodedRichText, type ExtractParamKeys, LangsysApp, LangsysAppAPI, type LocaleSource, Logger, PHRASE_MARKER_ATTR, type ParamPrimitive, type ParamsFor, Phrase, type PhraseOptions, type RichSlot, type Signal, type Subscriber, type TArgs, type TFunction, Translate, type TranslateOptions, type TranslationParams, Translations, type Unsubscriber, type Updater, canonicalizeLocale, createSignal, currentlyLoadedLocale, encodeRichText, generateCustomId, getValue, type iCategories, type iContentBlock, type iCountry, type iCountryDialCode, type iCountryList, type iCurrency, type iCurrencyList, type iLangsysConfig, type iLangsysInitConfig, type ResponseObject as iLangsysResponse, type iLanguageName, type iLocaleData, type iLocaleDefault, type iLocaleFlat, type iProject, type iTranslations, interpolate, isContentBlockKnown, isEmpty, isICU, logger, markupTokenValues, md5, persist, reconstitute, registerContentBlock, sTranslations, stripSentinels, t, tSignal, tokenizeElement };
|
package/dist/index.d.ts
CHANGED
|
@@ -358,8 +358,12 @@ declare class LangsysAppClass {
|
|
|
358
358
|
private getUserLanguagePreferences;
|
|
359
359
|
private parseAcceptLanguageHeader;
|
|
360
360
|
private findBestLocaleMatch;
|
|
361
|
-
|
|
362
|
-
|
|
361
|
+
/**
|
|
362
|
+
* Resolve the effective locale for a data-fetching helper: explicit
|
|
363
|
+
* argument, else the user's current locale, else the base locale —
|
|
364
|
+
* always in BCP 47 canonical form so cache keys and API routes agree.
|
|
365
|
+
*/
|
|
366
|
+
private resolveLocale;
|
|
363
367
|
}
|
|
364
368
|
declare const LangsysApp: LangsysAppClass;
|
|
365
369
|
|
|
@@ -371,6 +375,8 @@ interface TranslateOptions {
|
|
|
371
375
|
custom_id?: string;
|
|
372
376
|
/** Optional human-readable label shown in the Translation Manager. */
|
|
373
377
|
label?: string;
|
|
378
|
+
/** Interpolation params — `{name}`, `{count}`, etc. Same single-brace syntax as `t()`. */
|
|
379
|
+
params?: Record<string, ParamPrimitive>;
|
|
374
380
|
}
|
|
375
381
|
/**
|
|
376
382
|
* Wrap a DOM element and manage translation for its contents.
|
|
@@ -395,6 +401,8 @@ declare class Translate {
|
|
|
395
401
|
private custom_id;
|
|
396
402
|
private unsubscribeLocale;
|
|
397
403
|
constructor(element: HTMLElement, options?: TranslateOptions);
|
|
404
|
+
/** Update interpolation params (e.g. a changed count) and re-render. Mirrors `Phrase.setParams`. */
|
|
405
|
+
setParams(params: Record<string, ParamPrimitive> | undefined): void;
|
|
398
406
|
/** Stop reacting to locale changes. Safe to call multiple times. */
|
|
399
407
|
destroy(): void;
|
|
400
408
|
private translateUpdate;
|
|
@@ -402,6 +410,12 @@ declare class Translate {
|
|
|
402
410
|
private handleContentBlock;
|
|
403
411
|
private translate;
|
|
404
412
|
private getTranslation;
|
|
413
|
+
/**
|
|
414
|
+
* Interpolate `{name}`-style params into a resolved text, matching `t()`:
|
|
415
|
+
* unknown keys fall through untouched, and the untranslated fallback is
|
|
416
|
+
* interpolated too. No-op when no params were supplied.
|
|
417
|
+
*/
|
|
418
|
+
private applyParams;
|
|
405
419
|
private translateAttributes;
|
|
406
420
|
private translateAttribute;
|
|
407
421
|
}
|
|
@@ -648,6 +662,8 @@ declare function md5(inputString: string): string;
|
|
|
648
662
|
*
|
|
649
663
|
* - Matches `{var, plural, …}`, `{var, select, …}`, `{var, selectordinal, …}`,
|
|
650
664
|
* `{var, number, …}`, `{var, date, …}`, `{var, time, …}`.
|
|
665
|
+
* - Also matches the style-less forms `{var, number}`, `{var, date}`,
|
|
666
|
+
* `{var, time}` — valid ICU with the locale-default style.
|
|
651
667
|
* - Doesn't match plain interpolation slots like `{name}` or `{count}`.
|
|
652
668
|
*
|
|
653
669
|
* Exported because the Translation Manager UI needs the same detection logic
|
|
@@ -664,7 +680,11 @@ declare function isICU(template: string): boolean;
|
|
|
664
680
|
* etc.) and gender-select branches.
|
|
665
681
|
* - Simple `{name}` interpolation: cheap regex replacement. Unknown
|
|
666
682
|
* placeholders are left untouched so missing data is visible to the
|
|
667
|
-
* developer rather than silently rendering empty strings.
|
|
683
|
+
* developer rather than silently rendering empty strings. Number and
|
|
684
|
+
* Date values are formatted per the target locale's CLDR rules
|
|
685
|
+
* (`Intl.NumberFormat` / `Intl.DateTimeFormat`) — pass numbers as
|
|
686
|
+
* strings to opt out (e.g. IDs and codes that must not get grouping
|
|
687
|
+
* separators).
|
|
668
688
|
*
|
|
669
689
|
* Malformed ICU falls through to simple interpolation rather than throwing,
|
|
670
690
|
* so the developer sees a broken-but-visible string instead of a runtime crash.
|
|
@@ -676,6 +696,28 @@ declare function isICU(template: string): boolean;
|
|
|
676
696
|
*/
|
|
677
697
|
declare function interpolate(template: string, params: Record<string, unknown>, locale?: string): string;
|
|
678
698
|
|
|
699
|
+
/**
|
|
700
|
+
* Locale-identifier handling, CLDR/BCP 47 flavored. Everything here rides on
|
|
701
|
+
* the platform's native `Intl` — no bundled locale data.
|
|
702
|
+
*
|
|
703
|
+
* The SDK's convention: canonicalize once at every input boundary (init
|
|
704
|
+
* config, user-locale store emissions, detectPreferredLocale, API routes) and
|
|
705
|
+
* treat the canonical string as the identity everywhere downstream — cache
|
|
706
|
+
* keys, equality checks, and the wire format all use it.
|
|
707
|
+
*/
|
|
708
|
+
/**
|
|
709
|
+
* Canonicalize a locale identifier to BCP 47 canonical form (the form CLDR
|
|
710
|
+
* data is keyed by): language lowercase, script Titlecase, region uppercase —
|
|
711
|
+
* `en-us` → `en-US`, `zh-hant-tw` → `zh-Hant-TW`. Underscores are accepted
|
|
712
|
+
* and converted (`en_US` → `en-US`). Legacy aliases are resolved (`iw` → `he`,
|
|
713
|
+
* `in` → `id`).
|
|
714
|
+
*
|
|
715
|
+
* Structurally invalid tags fall back to best-effort manual casing rather
|
|
716
|
+
* than throwing, so a bad config value degrades to a failed catalog lookup
|
|
717
|
+
* instead of a crash.
|
|
718
|
+
*/
|
|
719
|
+
declare function canonicalizeLocale(locale: string): string;
|
|
720
|
+
|
|
679
721
|
interface iProject {
|
|
680
722
|
id: string;
|
|
681
723
|
owner_id: string;
|
|
@@ -696,4 +738,4 @@ interface iProject {
|
|
|
696
738
|
declare const t: TFunction;
|
|
697
739
|
declare const tSignal: Signal<TFunction>;
|
|
698
740
|
|
|
699
|
-
export { type EncodedRichText, type ExtractParamKeys, LangsysApp, LangsysAppAPI, type LocaleSource, Logger, PHRASE_MARKER_ATTR, type ParamPrimitive, type ParamsFor, Phrase, type PhraseOptions, type RichSlot, type Signal, type Subscriber, type TArgs, type TFunction, Translate, type TranslateOptions, type TranslationParams, Translations, type Unsubscriber, type Updater, createSignal, currentlyLoadedLocale, encodeRichText, generateCustomId, getValue, type iCategories, type iContentBlock, type iCountry, type iCountryDialCode, type iCountryList, type iCurrency, type iCurrencyList, type iLangsysConfig, type iLangsysInitConfig, type ResponseObject as iLangsysResponse, type iLanguageName, type iLocaleData, type iLocaleDefault, type iLocaleFlat, type iProject, type iTranslations, interpolate, isContentBlockKnown, isEmpty, isICU, logger, markupTokenValues, md5, persist, reconstitute, registerContentBlock, sTranslations, stripSentinels, t, tSignal, tokenizeElement };
|
|
741
|
+
export { type EncodedRichText, type ExtractParamKeys, LangsysApp, LangsysAppAPI, type LocaleSource, Logger, PHRASE_MARKER_ATTR, type ParamPrimitive, type ParamsFor, Phrase, type PhraseOptions, type RichSlot, type Signal, type Subscriber, type TArgs, type TFunction, Translate, type TranslateOptions, type TranslationParams, Translations, type Unsubscriber, type Updater, canonicalizeLocale, createSignal, currentlyLoadedLocale, encodeRichText, generateCustomId, getValue, type iCategories, type iContentBlock, type iCountry, type iCountryDialCode, type iCountryList, type iCurrency, type iCurrencyList, type iLangsysConfig, type iLangsysInitConfig, type ResponseObject as iLangsysResponse, type iLanguageName, type iLocaleData, type iLocaleDefault, type iLocaleFlat, type iProject, type iTranslations, interpolate, isContentBlockKnown, isEmpty, isICU, logger, markupTokenValues, md5, persist, reconstitute, registerContentBlock, sTranslations, stripSentinels, t, tSignal, tokenizeElement };
|