@astroscope/i18n 0.1.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/README.md +262 -0
- package/dist/babel-plugin-FUTQRKLT.js +121 -0
- package/dist/babel-plugin-K2K4ZPM5.js +118 -0
- package/dist/chunk-22ZZFFC2.js +159 -0
- package/dist/chunk-2PSXD3JJ.js +144 -0
- package/dist/chunk-3VI62RLT.js +176 -0
- package/dist/chunk-4A5BKHFN.js +16 -0
- package/dist/chunk-4DAQPWXI.js +36 -0
- package/dist/chunk-4OGX6AF5.js +10 -0
- package/dist/chunk-4PHYKXO3.js +227 -0
- package/dist/chunk-4UBFISFY.js +376 -0
- package/dist/chunk-5DERF6DV.js +266 -0
- package/dist/chunk-5KGNHFTC.js +344 -0
- package/dist/chunk-5PP4D2VK.js +23 -0
- package/dist/chunk-6BW3PN23.js +14 -0
- package/dist/chunk-6ESQ4JQI.js +263 -0
- package/dist/chunk-A7MPXMOP.js +202 -0
- package/dist/chunk-AWZ2SQDW.js +149 -0
- package/dist/chunk-AYY2YIBQ.js +52 -0
- package/dist/chunk-BMNEJFTD.js +56 -0
- package/dist/chunk-BSXQGEUK.js +16 -0
- package/dist/chunk-BSYTJFGF.js +21 -0
- package/dist/chunk-BVPXEGTT.js +12 -0
- package/dist/chunk-C4DJYWF6.js +193 -0
- package/dist/chunk-C5EJYE2P.js +245 -0
- package/dist/chunk-CLNOQHMS.js +254 -0
- package/dist/chunk-E5MCIRSU.js +144 -0
- package/dist/chunk-E7ZJS7WX.js +162 -0
- package/dist/chunk-EMM6LRO2.js +8 -0
- package/dist/chunk-ESFGCYYH.js +24 -0
- package/dist/chunk-FAKBSLNW.js +24 -0
- package/dist/chunk-FHBVI3TL.js +372 -0
- package/dist/chunk-FI5KZ5IO.js +17 -0
- package/dist/chunk-H5R6YMOL.js +233 -0
- package/dist/chunk-H62K3FGA.js +236 -0
- package/dist/chunk-HDG2R6XT.js +211 -0
- package/dist/chunk-HGXU5QAK.js +344 -0
- package/dist/chunk-HHRMR3TM.js +17 -0
- package/dist/chunk-HS4HVBAD.js +127 -0
- package/dist/chunk-IPJWKKHJ.js +324 -0
- package/dist/chunk-ITTL4V7J.js +24 -0
- package/dist/chunk-IWUBCMOK.js +128 -0
- package/dist/chunk-JJBBY2GR.js +14 -0
- package/dist/chunk-JJEDOJBR.js +193 -0
- package/dist/chunk-JTUKXNIJ.js +23 -0
- package/dist/chunk-K7YULG4A.js +14 -0
- package/dist/chunk-KNDYKTHE.js +31 -0
- package/dist/chunk-KNONI6DP.js +89 -0
- package/dist/chunk-LMTEO22Y.js +17 -0
- package/dist/chunk-LRLZEX4D.js +147 -0
- package/dist/chunk-MFKPLUAN.js +241 -0
- package/dist/chunk-MIWXQOO3.js +316 -0
- package/dist/chunk-MJRTAWPR.js +261 -0
- package/dist/chunk-MZEPQCXX.js +249 -0
- package/dist/chunk-NHHTSFA7.js +237 -0
- package/dist/chunk-NTTXM7AG.js +23 -0
- package/dist/chunk-NZFAVJXR.js +192 -0
- package/dist/chunk-OFNFSDW3.js +13 -0
- package/dist/chunk-PG3XDNGF.js +227 -0
- package/dist/chunk-PVEVTPNK.js +139 -0
- package/dist/chunk-QAO4BXS4.js +244 -0
- package/dist/chunk-QCTULQQK.js +34 -0
- package/dist/chunk-QFAAGCP5.js +177 -0
- package/dist/chunk-QKND2KCA.js +163 -0
- package/dist/chunk-QZEGY6RJ.js +151 -0
- package/dist/chunk-RAE2L6FT.js +193 -0
- package/dist/chunk-S3ABJBU3.js +255 -0
- package/dist/chunk-SVDVCPCV.js +236 -0
- package/dist/chunk-T35ZUWTL.js +153 -0
- package/dist/chunk-T6WV5DW6.js +156 -0
- package/dist/chunk-TGUXVDA3.js +82 -0
- package/dist/chunk-TYMO7K3A.js +173 -0
- package/dist/chunk-V4RBFLQL.js +23 -0
- package/dist/chunk-V4XWJXXZ.js +23 -0
- package/dist/chunk-VQCY3OKK.js +258 -0
- package/dist/chunk-WLGOJPDJ.js +15 -0
- package/dist/chunk-WUEPDJIL.js +259 -0
- package/dist/chunk-X3L7WZLY.js +254 -0
- package/dist/chunk-XDD62ZM3.js +255 -0
- package/dist/chunk-XFXXEDRD.js +36 -0
- package/dist/chunk-XKYOR5UK.js +8 -0
- package/dist/chunk-Y26535SI.js +239 -0
- package/dist/chunk-Y3PQX5TX.js +152 -0
- package/dist/chunk-Y4BE2V6F.js +347 -0
- package/dist/chunk-Z4IZYDIA.js +24 -0
- package/dist/chunk-Z52G4CYY.js +14 -0
- package/dist/chunk-ZGLUYWVM.js +128 -0
- package/dist/client/directives/idle.d.ts +9 -0
- package/dist/client/directives/idle.js +15 -0
- package/dist/client/directives/load.d.ts +9 -0
- package/dist/client/directives/load.js +15 -0
- package/dist/client/directives/media.d.ts +9 -0
- package/dist/client/directives/media.js +15 -0
- package/dist/client/directives/only.d.ts +9 -0
- package/dist/client/directives/only.js +15 -0
- package/dist/client/directives/utils.d.ts +10 -0
- package/dist/client/directives/utils.js +7 -0
- package/dist/client/directives/visible.d.ts +9 -0
- package/dist/client/directives/visible.js +15 -0
- package/dist/client/import-with-i18n.d.ts +16 -0
- package/dist/client/import-with-i18n.js +8 -0
- package/dist/client/t.d.ts +20 -0
- package/dist/client/t.js +37 -0
- package/dist/client-directives/idle.d.ts +9 -0
- package/dist/client-directives/idle.js +15 -0
- package/dist/client-directives/load.d.ts +9 -0
- package/dist/client-directives/load.js +15 -0
- package/dist/client-directives/media.d.ts +9 -0
- package/dist/client-directives/media.js +15 -0
- package/dist/client-directives/only.d.ts +9 -0
- package/dist/client-directives/only.js +15 -0
- package/dist/client-directives/utils.d.ts +9 -0
- package/dist/client-directives/utils.js +7 -0
- package/dist/client-directives/visible.d.ts +9 -0
- package/dist/client-directives/visible.js +15 -0
- package/dist/extraction/index.d.ts +34 -0
- package/dist/extraction/index.js +9 -0
- package/dist/i18n-3cZHoHwP.d.ts +86 -0
- package/dist/i18n-BGfrSNM8.d.ts +56 -0
- package/dist/i18n-BHU81LMA.d.ts +55 -0
- package/dist/i18n-BagoeH4_.d.ts +62 -0
- package/dist/i18n-BeL84090.d.ts +77 -0
- package/dist/i18n-BeRWDfHi.d.ts +55 -0
- package/dist/i18n-Bfs2PVcf.d.ts +79 -0
- package/dist/i18n-BrL7p3aN.d.ts +99 -0
- package/dist/i18n-CNQNCFU0.d.ts +55 -0
- package/dist/i18n-CX_uU8V2.d.ts +80 -0
- package/dist/i18n-Cr1QZCwe.d.ts +64 -0
- package/dist/i18n-CzTRxGeX.d.ts +80 -0
- package/dist/i18n-DUOFiC7g.d.ts +77 -0
- package/dist/i18n-DcF47BHS.d.ts +77 -0
- package/dist/i18n-DifWvtaO.d.ts +60 -0
- package/dist/i18n-DumSqX1t.d.ts +55 -0
- package/dist/i18n-fWTJw12h.d.ts +80 -0
- package/dist/import-with-i18n.d.ts +23 -0
- package/dist/import-with-i18n.js +7 -0
- package/dist/index.d.ts +68 -0
- package/dist/index.js +151 -0
- package/dist/init.d.ts +2 -0
- package/dist/init.js +8 -0
- package/dist/internal.d.ts +11 -0
- package/dist/internal.js +9 -0
- package/dist/middleware-entrypoint-C0Drh9E_.d.ts +29 -0
- package/dist/middleware-entrypoint-mEl66IUy.d.ts +29 -0
- package/dist/middleware-entrypoint.d.ts +5 -0
- package/dist/middleware-entrypoint.js +30 -0
- package/dist/server/middleware-entrypoint.d.ts +2 -0
- package/dist/server/middleware-entrypoint.js +28 -0
- package/dist/server/t.d.ts +17 -0
- package/dist/server/t.js +59 -0
- package/dist/t-BY_C9lZ1.d.ts +30 -0
- package/dist/t-CG3yDiEa.d.ts +30 -0
- package/dist/t-CHsBfrPr.d.ts +30 -0
- package/dist/t-DQpXaDhP.d.ts +30 -0
- package/dist/t.client.d.ts +11 -0
- package/dist/t.client.js +35 -0
- package/dist/t.server.d.ts +22 -0
- package/dist/t.server.js +12 -0
- package/dist/types-8uKCwFda.d.ts +24 -0
- package/dist/types-BC6K-pID.d.ts +110 -0
- package/dist/types-BUV7BZML.d.ts +55 -0
- package/dist/types-BWGB322F.d.ts +46 -0
- package/dist/types-B_-RxW4A.d.ts +7 -0
- package/dist/types-BaaSiz9n.d.ts +7 -0
- package/dist/types-Bgl2V5xo.d.ts +102 -0
- package/dist/types-BwhB6IT4.d.ts +111 -0
- package/dist/types-Bzp6KxsI.d.ts +50 -0
- package/dist/types-C6rOJFY2.d.ts +24 -0
- package/dist/types-C7lD-Woj.d.ts +50 -0
- package/dist/types-CLWZeQhD.d.ts +54 -0
- package/dist/types-COXt613w.d.ts +19 -0
- package/dist/types-CUlkbl9-.d.ts +50 -0
- package/dist/types-CVv7GGPj.d.ts +46 -0
- package/dist/types-CiIDN2sW.d.ts +64 -0
- package/dist/types-Cr86qjYl.d.ts +58 -0
- package/dist/types-CxnObiEO.d.ts +7 -0
- package/dist/types-D44mFUjA.d.ts +97 -0
- package/dist/types-D85m9UTC.d.ts +137 -0
- package/dist/types-DWhsmSPP.d.ts +102 -0
- package/dist/types-DdprXGJ1.d.ts +46 -0
- package/dist/types-DhVJ2ZIo.d.ts +43 -0
- package/dist/types-DnbOuM1L.d.ts +7 -0
- package/dist/types-DsNK_9sI.d.ts +24 -0
- package/dist/types-DvWBr9Xp.d.ts +17 -0
- package/dist/types-DwkIalh6.d.ts +24 -0
- package/dist/types-OYRgjtE_.d.ts +110 -0
- package/dist/types-SV8S05GX.d.ts +7 -0
- package/dist/types-TYn9WnxY.d.ts +46 -0
- package/dist/types-aXCBbdhq.d.ts +55 -0
- package/dist/types-gn4aNKGx.d.ts +54 -0
- package/dist/types-nippsMkm.d.ts +54 -0
- package/package.json +105 -0
- package/src/components/I18nScript.astro +37 -0
- package/src/components/index.ts +2 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { T as TranslationMeta } from './types-OYRgjtE_.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Translate function signature
|
|
5
|
+
*
|
|
6
|
+
* @param key - Translation key (e.g., 'checkout.title')
|
|
7
|
+
* @param meta - Metadata with example and variable definitions (extracted at build time)
|
|
8
|
+
* @param values - Runtime values for interpolation
|
|
9
|
+
* @returns Translated string
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* // Simple
|
|
13
|
+
* t('checkout.title', { example: 'Bestellübersicht' })
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* // With variables
|
|
17
|
+
* t('checkout.tax', {
|
|
18
|
+
* example: 'Enthält {name} MwSt.',
|
|
19
|
+
* variables: { name: { example: '19%' } }
|
|
20
|
+
* }, { name: taxRate })
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* // Pluralization (ICU)
|
|
24
|
+
* t('cart.items', {
|
|
25
|
+
* example: '{count, plural, one {# item} other {# items}}'
|
|
26
|
+
* }, { count: itemCount })
|
|
27
|
+
*/
|
|
28
|
+
type TranslateFunction = (key: string, meta: TranslationMeta, values?: Record<string, unknown>) => string;
|
|
29
|
+
|
|
30
|
+
export type { TranslateFunction as T };
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { T as TranslationMeta } from './types-BC6K-pID.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Translate function signature
|
|
5
|
+
*
|
|
6
|
+
* @param key - Translation key (e.g., 'checkout.title')
|
|
7
|
+
* @param meta - Metadata with example and variable definitions (extracted at build time)
|
|
8
|
+
* @param values - Runtime values for interpolation
|
|
9
|
+
* @returns Translated string
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* // Simple
|
|
13
|
+
* t('checkout.title', { example: 'Bestellübersicht' })
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* // With variables
|
|
17
|
+
* t('checkout.tax', {
|
|
18
|
+
* example: 'Enthält {name} MwSt.',
|
|
19
|
+
* variables: { name: { example: '19%' } }
|
|
20
|
+
* }, { name: taxRate })
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* // Pluralization (ICU)
|
|
24
|
+
* t('cart.items', {
|
|
25
|
+
* example: '{count, plural, one {# item} other {# items}}'
|
|
26
|
+
* }, { count: itemCount })
|
|
27
|
+
*/
|
|
28
|
+
type TranslateFunction = (key: string, meta: TranslationMeta, values?: Record<string, unknown>) => string;
|
|
29
|
+
|
|
30
|
+
export type { TranslateFunction as T };
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { T as TranslationMeta } from './types-D44mFUjA.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Translate function signature
|
|
5
|
+
*
|
|
6
|
+
* @param key - Translation key (e.g., 'checkout.title')
|
|
7
|
+
* @param meta - Metadata with example and variable definitions (extracted at build time)
|
|
8
|
+
* @param values - Runtime values for interpolation
|
|
9
|
+
* @returns Translated string
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* // Simple
|
|
13
|
+
* t('checkout.title', { example: 'Bestellübersicht' })
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* // With variables
|
|
17
|
+
* t('checkout.tax', {
|
|
18
|
+
* example: 'Enthält {name} MwSt.',
|
|
19
|
+
* variables: { name: { example: '19%' } }
|
|
20
|
+
* }, { name: taxRate })
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* // Pluralization (ICU)
|
|
24
|
+
* t('cart.items', {
|
|
25
|
+
* example: '{count, plural, one {# item} other {# items}}'
|
|
26
|
+
* }, { count: itemCount })
|
|
27
|
+
*/
|
|
28
|
+
type TranslateFunction = (key: string, meta: TranslationMeta, values?: Record<string, unknown>) => string;
|
|
29
|
+
|
|
30
|
+
export type { TranslateFunction as T };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { d as TranslateFunction } from './types-DWhsmSPP.js';
|
|
2
|
+
export { T as TranslationMeta } from './types-DWhsmSPP.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Client-side translate function
|
|
6
|
+
* Reads from window.__i18n__.translations (injected per-chunk)
|
|
7
|
+
* Falls back to meta.example if translation is missing
|
|
8
|
+
*/
|
|
9
|
+
declare const t: TranslateFunction;
|
|
10
|
+
|
|
11
|
+
export { TranslateFunction, t };
|
package/dist/t.client.js
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// src/t.client.ts
|
|
2
|
+
import MessageFormat from "@messageformat/core";
|
|
3
|
+
var compiledCache = /* @__PURE__ */ new Map();
|
|
4
|
+
var mf = null;
|
|
5
|
+
function getMessageFormat() {
|
|
6
|
+
if (!mf) {
|
|
7
|
+
mf = new MessageFormat(window.__i18n__.locale);
|
|
8
|
+
}
|
|
9
|
+
return mf;
|
|
10
|
+
}
|
|
11
|
+
function compileMessage(message) {
|
|
12
|
+
try {
|
|
13
|
+
return getMessageFormat().compile(message);
|
|
14
|
+
} catch {
|
|
15
|
+
return (values) => {
|
|
16
|
+
if (!values) return message;
|
|
17
|
+
return Object.entries(values).reduce(
|
|
18
|
+
(result, [key, value]) => result.replace(new RegExp(`\\{${key}\\}`, "g"), String(value)),
|
|
19
|
+
message
|
|
20
|
+
);
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
var t = (key, meta, values) => {
|
|
25
|
+
let compiled = compiledCache.get(key);
|
|
26
|
+
if (!compiled) {
|
|
27
|
+
const raw = window.__i18n__.translations[key] ?? meta.example;
|
|
28
|
+
compiled = compileMessage(raw);
|
|
29
|
+
compiledCache.set(key, compiled);
|
|
30
|
+
}
|
|
31
|
+
return compiled(values);
|
|
32
|
+
};
|
|
33
|
+
export {
|
|
34
|
+
t
|
|
35
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { I as I18nContext, d as TranslateFunction } from './types-DWhsmSPP.js';
|
|
2
|
+
export { T as TranslationMeta } from './types-DWhsmSPP.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Set the i18n context for the current request (called by middleware)
|
|
6
|
+
*/
|
|
7
|
+
declare function setContext(context: I18nContext): void;
|
|
8
|
+
/**
|
|
9
|
+
* Get the current i18n context
|
|
10
|
+
*/
|
|
11
|
+
declare function getContext(): I18nContext | null;
|
|
12
|
+
/**
|
|
13
|
+
* Clear the context after request (called by middleware)
|
|
14
|
+
*/
|
|
15
|
+
declare function clearContext(): void;
|
|
16
|
+
/**
|
|
17
|
+
* Server-side translate function
|
|
18
|
+
* Reads from request-scoped context set by middleware
|
|
19
|
+
*/
|
|
20
|
+
declare const t: TranslateFunction;
|
|
21
|
+
|
|
22
|
+
export { TranslateFunction, clearContext, getContext, setContext, t };
|
package/dist/t.server.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { T as TranslationMeta } from './types-Bzp6KxsI.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Extracted metadata for a single translation key
|
|
5
|
+
*/
|
|
6
|
+
type ExtractedKey = {
|
|
7
|
+
key: string;
|
|
8
|
+
meta: TranslationMeta;
|
|
9
|
+
file: string;
|
|
10
|
+
line: number;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Chunk-to-keys mapping produced by Vite plugin
|
|
14
|
+
*/
|
|
15
|
+
type ChunkManifest = Record<string, string[]>;
|
|
16
|
+
/**
|
|
17
|
+
* Full extraction manifest
|
|
18
|
+
*/
|
|
19
|
+
type ExtractionManifest = {
|
|
20
|
+
keys: ExtractedKey[];
|
|
21
|
+
chunks: ChunkManifest;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export type { ChunkManifest as C, ExtractedKey as E, ExtractionManifest as a };
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Variable definition with optional example for CMS/documentation
|
|
3
|
+
*/
|
|
4
|
+
type VariableDef = {
|
|
5
|
+
example?: string;
|
|
6
|
+
description?: string;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Metadata for a translation key - extracted at build time, synced to CMS
|
|
10
|
+
*/
|
|
11
|
+
type TranslationMeta = {
|
|
12
|
+
example: string;
|
|
13
|
+
variables?: Record<string, VariableDef>;
|
|
14
|
+
description?: string;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Compiled translation ready for runtime use
|
|
18
|
+
*/
|
|
19
|
+
type CompiledTranslation = (values?: Record<string, unknown>) => string;
|
|
20
|
+
/**
|
|
21
|
+
* Map of translation keys to compiled functions
|
|
22
|
+
*/
|
|
23
|
+
type CompiledTranslations = Record<string, CompiledTranslation>;
|
|
24
|
+
/**
|
|
25
|
+
* Raw translation strings from CMS (before compilation)
|
|
26
|
+
*/
|
|
27
|
+
type RawTranslations = Record<string, string>;
|
|
28
|
+
/**
|
|
29
|
+
* Extracted metadata for a single translation key
|
|
30
|
+
*/
|
|
31
|
+
type ExtractedKey = {
|
|
32
|
+
key: string;
|
|
33
|
+
meta: TranslationMeta;
|
|
34
|
+
file: string;
|
|
35
|
+
line: number;
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Chunk-to-keys mapping produced by Vite plugin
|
|
39
|
+
*/
|
|
40
|
+
type ChunkManifest = Record<string, string[]>;
|
|
41
|
+
/**
|
|
42
|
+
* Full extraction manifest
|
|
43
|
+
*/
|
|
44
|
+
type ExtractionManifest = {
|
|
45
|
+
keys: ExtractedKey[];
|
|
46
|
+
chunks: ChunkManifest;
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Fallback behavior when translation is missing
|
|
50
|
+
*/
|
|
51
|
+
type FallbackBehavior = 'key' | 'example' | 'throw' | ((key: string, meta?: TranslationMeta) => string);
|
|
52
|
+
/**
|
|
53
|
+
* CMS adapter interface
|
|
54
|
+
*/
|
|
55
|
+
type CmsAdapter = {
|
|
56
|
+
/**
|
|
57
|
+
* Fetch translations for given locale and keys
|
|
58
|
+
*/
|
|
59
|
+
fetch: (locale: string, keys: string[]) => Promise<RawTranslations>;
|
|
60
|
+
/**
|
|
61
|
+
* Sync extracted keys to CMS (push metadata)
|
|
62
|
+
*/
|
|
63
|
+
sync?: (manifest: ExtractionManifest) => Promise<void>;
|
|
64
|
+
};
|
|
65
|
+
/**
|
|
66
|
+
* Integration options
|
|
67
|
+
*/
|
|
68
|
+
type I18nIntegrationOptions = {
|
|
69
|
+
/**
|
|
70
|
+
* Supported locales
|
|
71
|
+
*/
|
|
72
|
+
locales: string[];
|
|
73
|
+
/**
|
|
74
|
+
* Default locale
|
|
75
|
+
*/
|
|
76
|
+
defaultLocale: string;
|
|
77
|
+
/**
|
|
78
|
+
* Fallback behavior when translation is missing
|
|
79
|
+
* @default 'example'
|
|
80
|
+
*/
|
|
81
|
+
fallback?: FallbackBehavior;
|
|
82
|
+
/**
|
|
83
|
+
* CMS adapter for fetching/syncing translations
|
|
84
|
+
*/
|
|
85
|
+
cms: CmsAdapter;
|
|
86
|
+
/**
|
|
87
|
+
* Function to detect locale from request
|
|
88
|
+
* @default reads from Astro.currentLocale or Accept-Language header
|
|
89
|
+
*/
|
|
90
|
+
detectLocale?: (request: Request) => string;
|
|
91
|
+
};
|
|
92
|
+
/**
|
|
93
|
+
* Request-scoped i18n context
|
|
94
|
+
*/
|
|
95
|
+
type I18nContext = {
|
|
96
|
+
locale: string;
|
|
97
|
+
translations: CompiledTranslations;
|
|
98
|
+
fallback: FallbackBehavior;
|
|
99
|
+
meta: Record<string, TranslationMeta>;
|
|
100
|
+
};
|
|
101
|
+
/**
|
|
102
|
+
* Global i18n config (from virtual module)
|
|
103
|
+
*/
|
|
104
|
+
type I18nConfig = {
|
|
105
|
+
locales: string[];
|
|
106
|
+
defaultLocale: string;
|
|
107
|
+
fallback: FallbackBehavior;
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
export type { CmsAdapter as C, ExtractedKey as E, FallbackBehavior as F, I18nIntegrationOptions as I, RawTranslations as R, TranslationMeta as T, VariableDef as V, ChunkManifest as a, CompiledTranslation as b, CompiledTranslations as c, ExtractionManifest as d, I18nContext as e, I18nConfig as f };
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Variable definition with optional example for CMS/documentation
|
|
3
|
+
*/
|
|
4
|
+
type VariableDef = {
|
|
5
|
+
example?: string;
|
|
6
|
+
description?: string;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Metadata for a translation key - extracted at build time, synced to CMS
|
|
10
|
+
*/
|
|
11
|
+
type TranslationMeta = {
|
|
12
|
+
example: string;
|
|
13
|
+
variables?: Record<string, VariableDef>;
|
|
14
|
+
description?: string;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Compiled translation ready for runtime use
|
|
18
|
+
*/
|
|
19
|
+
type CompiledTranslation = (values?: Record<string, unknown>) => string;
|
|
20
|
+
/**
|
|
21
|
+
* Map of translation keys to compiled functions
|
|
22
|
+
*/
|
|
23
|
+
type CompiledTranslations = Record<string, CompiledTranslation>;
|
|
24
|
+
/**
|
|
25
|
+
* Raw translation strings from CMS (before compilation)
|
|
26
|
+
*/
|
|
27
|
+
type RawTranslations = Record<string, string>;
|
|
28
|
+
/**
|
|
29
|
+
* Translate function signature
|
|
30
|
+
*
|
|
31
|
+
* @param key - Translation key (e.g., 'checkout.title')
|
|
32
|
+
* @param meta - Metadata with example and variable definitions (extracted at build time)
|
|
33
|
+
* @param values - Runtime values for interpolation
|
|
34
|
+
* @returns Translated string
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* // Simple
|
|
38
|
+
* t('checkout.title', { example: 'Bestellübersicht' })
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* // With variables
|
|
42
|
+
* t('checkout.tax', {
|
|
43
|
+
* example: 'Enthält {name} MwSt.',
|
|
44
|
+
* variables: { name: { example: '19%' } }
|
|
45
|
+
* }, { name: taxRate })
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* // Pluralization (ICU)
|
|
49
|
+
* t('cart.items', {
|
|
50
|
+
* example: '{count, plural, one {# item} other {# items}}'
|
|
51
|
+
* }, { count: itemCount })
|
|
52
|
+
*/
|
|
53
|
+
type TranslateFunction = (key: string, meta: TranslationMeta, values?: Record<string, unknown>) => string;
|
|
54
|
+
|
|
55
|
+
export type { CompiledTranslations as C, RawTranslations as R, TranslationMeta as T, VariableDef as V, CompiledTranslation as a, TranslateFunction as b };
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Variable definition for CMS/documentation
|
|
3
|
+
*/
|
|
4
|
+
type VariableDef = {
|
|
5
|
+
fallback?: string | undefined;
|
|
6
|
+
description?: string | undefined;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Metadata for a translation key - extracted at build time, synced to CMS
|
|
10
|
+
*/
|
|
11
|
+
type TranslationMeta = {
|
|
12
|
+
fallback: string;
|
|
13
|
+
variables?: Record<string, VariableDef> | undefined;
|
|
14
|
+
description?: string | undefined;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Compiled translation ready for runtime use
|
|
18
|
+
*/
|
|
19
|
+
type CompiledTranslation = (values?: Record<string, unknown> | undefined) => string;
|
|
20
|
+
/**
|
|
21
|
+
* Map of translation keys to compiled functions
|
|
22
|
+
*/
|
|
23
|
+
type CompiledTranslations = Record<string, CompiledTranslation>;
|
|
24
|
+
/**
|
|
25
|
+
* Raw translation strings from CMS (before compilation)
|
|
26
|
+
*/
|
|
27
|
+
type RawTranslations = Record<string, string>;
|
|
28
|
+
/**
|
|
29
|
+
* Translate function signature
|
|
30
|
+
*
|
|
31
|
+
* @param key - Translation key (e.g., 'checkout.title')
|
|
32
|
+
* @param meta - Fallback string or full metadata object
|
|
33
|
+
* @param values - Runtime values for interpolation
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* t('checkout.title', 'Order Summary')
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* t('cart.items', '{count, plural, one {# item} other {# items}}', { count: itemCount })
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* t('cart.total', { fallback: 'Total: {amount}', description: 'Cart total' }, { amount: '$49.99' })
|
|
43
|
+
*/
|
|
44
|
+
type TranslateFunction = (key: string, meta: TranslationMeta | string, values?: Record<string, unknown> | undefined) => string;
|
|
45
|
+
|
|
46
|
+
export type { CompiledTranslations as C, RawTranslations as R, TranslateFunction as T, TranslationMeta as a };
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Variable definition with optional example for CMS/documentation
|
|
3
|
+
*/
|
|
4
|
+
type VariableDef = {
|
|
5
|
+
example?: string;
|
|
6
|
+
description?: string;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Metadata for a translation key - extracted at build time, synced to CMS
|
|
10
|
+
*/
|
|
11
|
+
type TranslationMeta = {
|
|
12
|
+
example: string;
|
|
13
|
+
variables?: Record<string, VariableDef>;
|
|
14
|
+
description?: string;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Compiled translation ready for runtime use
|
|
18
|
+
*/
|
|
19
|
+
type CompiledTranslation = (values?: Record<string, unknown>) => string;
|
|
20
|
+
/**
|
|
21
|
+
* Map of translation keys to compiled functions
|
|
22
|
+
*/
|
|
23
|
+
type CompiledTranslations = Record<string, CompiledTranslation>;
|
|
24
|
+
/**
|
|
25
|
+
* Raw translation strings from CMS (before compilation)
|
|
26
|
+
*/
|
|
27
|
+
type RawTranslations = Record<string, string>;
|
|
28
|
+
/**
|
|
29
|
+
* Extracted metadata for a single translation key
|
|
30
|
+
*/
|
|
31
|
+
type ExtractedKey = {
|
|
32
|
+
key: string;
|
|
33
|
+
meta: TranslationMeta;
|
|
34
|
+
file: string;
|
|
35
|
+
line: number;
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Chunk-to-keys mapping produced by Vite plugin
|
|
39
|
+
*/
|
|
40
|
+
type ChunkManifest = Record<string, string[]>;
|
|
41
|
+
/**
|
|
42
|
+
* Full extraction manifest
|
|
43
|
+
*/
|
|
44
|
+
type ExtractionManifest = {
|
|
45
|
+
keys: ExtractedKey[];
|
|
46
|
+
chunks: ChunkManifest;
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Fallback behavior when translation is missing
|
|
50
|
+
*/
|
|
51
|
+
type FallbackBehavior = 'key' | 'example' | 'throw' | ((key: string, meta?: TranslationMeta) => string);
|
|
52
|
+
/**
|
|
53
|
+
* Request-scoped i18n context
|
|
54
|
+
*/
|
|
55
|
+
type I18nContext = {
|
|
56
|
+
locale: string;
|
|
57
|
+
translations: CompiledTranslations;
|
|
58
|
+
fallback: FallbackBehavior;
|
|
59
|
+
meta: Record<string, TranslationMeta>;
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* Client-side i18n state stored on window.__i18n__
|
|
63
|
+
* Fallback is handled server-side; client just uses example from t() call if missing
|
|
64
|
+
*/
|
|
65
|
+
type I18nClientState = {
|
|
66
|
+
locale: string;
|
|
67
|
+
hashes: Record<string, string>;
|
|
68
|
+
translations: Record<string, string>;
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* Translate function signature
|
|
72
|
+
*
|
|
73
|
+
* @param key - Translation key (e.g., 'checkout.title')
|
|
74
|
+
* @param meta - Metadata with example and variable definitions (extracted at build time)
|
|
75
|
+
* @param values - Runtime values for interpolation
|
|
76
|
+
* @returns Translated string
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* // Simple
|
|
80
|
+
* t('checkout.title', { example: 'Bestellübersicht' })
|
|
81
|
+
*
|
|
82
|
+
* @example
|
|
83
|
+
* // With variables
|
|
84
|
+
* t('checkout.tax', {
|
|
85
|
+
* example: 'Enthält {name} MwSt.',
|
|
86
|
+
* variables: { name: { example: '19%' } }
|
|
87
|
+
* }, { name: taxRate })
|
|
88
|
+
*
|
|
89
|
+
* @example
|
|
90
|
+
* // Pluralization (ICU)
|
|
91
|
+
* t('cart.items', {
|
|
92
|
+
* example: '{count, plural, one {# item} other {# items}}'
|
|
93
|
+
* }, { count: itemCount })
|
|
94
|
+
*/
|
|
95
|
+
type TranslateFunction = (key: string, meta: TranslationMeta, values?: Record<string, unknown>) => string;
|
|
96
|
+
declare global {
|
|
97
|
+
interface Window {
|
|
98
|
+
__i18n__?: I18nClientState;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export type { ChunkManifest as C, ExtractedKey as E, FallbackBehavior as F, I18nContext as I, RawTranslations as R, TranslationMeta as T, VariableDef as V, CompiledTranslations as a, CompiledTranslation as b, ExtractionManifest as c, TranslateFunction as d };
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Variable definition with optional example for CMS/documentation
|
|
3
|
+
*/
|
|
4
|
+
type VariableDef = {
|
|
5
|
+
example?: string;
|
|
6
|
+
description?: string;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Metadata for a translation key - extracted at build time, synced to CMS
|
|
10
|
+
*/
|
|
11
|
+
type TranslationMeta = {
|
|
12
|
+
example: string;
|
|
13
|
+
variables?: Record<string, VariableDef>;
|
|
14
|
+
description?: string;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Compiled translation ready for runtime use
|
|
18
|
+
*/
|
|
19
|
+
type CompiledTranslation = (values?: Record<string, unknown>) => string;
|
|
20
|
+
/**
|
|
21
|
+
* Map of translation keys to compiled functions
|
|
22
|
+
*/
|
|
23
|
+
type CompiledTranslations = Record<string, CompiledTranslation>;
|
|
24
|
+
/**
|
|
25
|
+
* Raw translation strings from CMS (before compilation)
|
|
26
|
+
*/
|
|
27
|
+
type RawTranslations = Record<string, string>;
|
|
28
|
+
/**
|
|
29
|
+
* Extracted metadata for a single translation key
|
|
30
|
+
*/
|
|
31
|
+
type ExtractedKey = {
|
|
32
|
+
key: string;
|
|
33
|
+
meta: TranslationMeta;
|
|
34
|
+
file: string;
|
|
35
|
+
line: number;
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Chunk-to-keys mapping produced by Vite plugin
|
|
39
|
+
*/
|
|
40
|
+
type ChunkManifest = Record<string, string[]>;
|
|
41
|
+
/**
|
|
42
|
+
* Full extraction manifest
|
|
43
|
+
*/
|
|
44
|
+
type ExtractionManifest = {
|
|
45
|
+
keys: ExtractedKey[];
|
|
46
|
+
chunks: ChunkManifest;
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Fallback behavior when translation is missing
|
|
50
|
+
*/
|
|
51
|
+
type FallbackBehavior = 'key' | 'example' | 'throw' | ((key: string, meta?: TranslationMeta) => string);
|
|
52
|
+
/**
|
|
53
|
+
* CMS adapter interface
|
|
54
|
+
*/
|
|
55
|
+
type CmsAdapter = {
|
|
56
|
+
/**
|
|
57
|
+
* Fetch translations for given locale and keys
|
|
58
|
+
*/
|
|
59
|
+
fetch: (locale: string, keys: string[]) => Promise<RawTranslations>;
|
|
60
|
+
/**
|
|
61
|
+
* Sync extracted keys to CMS (push metadata)
|
|
62
|
+
*/
|
|
63
|
+
sync?: (manifest: ExtractionManifest) => Promise<void>;
|
|
64
|
+
};
|
|
65
|
+
/**
|
|
66
|
+
* User's i18n.ts exports
|
|
67
|
+
*/
|
|
68
|
+
type I18nUserConfig = {
|
|
69
|
+
/**
|
|
70
|
+
* CMS adapter for fetching/syncing translations
|
|
71
|
+
*/
|
|
72
|
+
cms: CmsAdapter;
|
|
73
|
+
/**
|
|
74
|
+
* Optional chunk manifest for per-chunk loading
|
|
75
|
+
* In production, this should be loaded from build output
|
|
76
|
+
*/
|
|
77
|
+
chunkManifest?: ChunkManifest;
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* Request-scoped i18n context
|
|
81
|
+
*/
|
|
82
|
+
type I18nContext = {
|
|
83
|
+
locale: string;
|
|
84
|
+
translations: CompiledTranslations;
|
|
85
|
+
fallback: FallbackBehavior;
|
|
86
|
+
meta: Record<string, TranslationMeta>;
|
|
87
|
+
};
|
|
88
|
+
/**
|
|
89
|
+
* Global i18n config (from virtual module)
|
|
90
|
+
*/
|
|
91
|
+
type I18nConfig = {
|
|
92
|
+
locales: string[];
|
|
93
|
+
defaultLocale: string;
|
|
94
|
+
fallback: FallbackBehavior;
|
|
95
|
+
};
|
|
96
|
+
/**
|
|
97
|
+
* Client-side i18n state stored on window.__i18n__
|
|
98
|
+
* Fallback is handled server-side; client just uses example from t() call if missing
|
|
99
|
+
*/
|
|
100
|
+
type I18nClientState = {
|
|
101
|
+
locale: string;
|
|
102
|
+
hashes: Record<string, string>;
|
|
103
|
+
translations: Record<string, string>;
|
|
104
|
+
};
|
|
105
|
+
declare global {
|
|
106
|
+
interface Window {
|
|
107
|
+
__i18n__?: I18nClientState;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export type { CmsAdapter as C, ExtractedKey as E, FallbackBehavior as F, I18nUserConfig as I, RawTranslations as R, TranslationMeta as T, VariableDef as V, ChunkManifest as a, CompiledTranslation as b, CompiledTranslations as c, ExtractionManifest as d, I18nContext as e, I18nConfig as f };
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Variable definition for documentation
|
|
3
|
+
*/
|
|
4
|
+
type VariableDef = {
|
|
5
|
+
fallback?: string | undefined;
|
|
6
|
+
description?: string | undefined;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Metadata for a translation key - extracted at build time
|
|
10
|
+
*/
|
|
11
|
+
type TranslationMeta = {
|
|
12
|
+
fallback: string;
|
|
13
|
+
variables?: Record<string, VariableDef> | undefined;
|
|
14
|
+
description?: string | undefined;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Compiled translation ready for runtime use
|
|
18
|
+
*/
|
|
19
|
+
type CompiledTranslation = (values?: Record<string, unknown> | undefined) => string;
|
|
20
|
+
/**
|
|
21
|
+
* Map of translation keys to compiled functions
|
|
22
|
+
*/
|
|
23
|
+
type CompiledTranslations = Record<string, CompiledTranslation>;
|
|
24
|
+
/**
|
|
25
|
+
* Raw translation strings (before compilation)
|
|
26
|
+
*/
|
|
27
|
+
type RawTranslations = Record<string, string>;
|
|
28
|
+
/**
|
|
29
|
+
* Client-side i18n state injected into window.__i18n__
|
|
30
|
+
*/
|
|
31
|
+
type I18nClientState = {
|
|
32
|
+
locale: string;
|
|
33
|
+
hashes: Record<string, string>;
|
|
34
|
+
translations: Record<string, string>;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Translate function
|
|
38
|
+
*
|
|
39
|
+
* @param key - translation key
|
|
40
|
+
* @param meta - fallback string or meta object with fallback
|
|
41
|
+
* @param values - runtime interpolation values (ICU MessageFormat)
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* t('checkout.title', 'Order Summary')
|
|
45
|
+
* t('cart.items', '{count, plural, one {# item} other {# items}}', { count: itemCount })
|
|
46
|
+
* t('cart.total', { fallback: 'Total: {amount}' }, { amount: '$49.99' })
|
|
47
|
+
*/
|
|
48
|
+
type TranslateFunction = (key: string, meta: TranslationMeta | string, values?: Record<string, unknown> | undefined) => string;
|
|
49
|
+
|
|
50
|
+
export type { CompiledTranslations as C, I18nClientState as I, RawTranslations as R, TranslationMeta as T, TranslateFunction as a };
|