@i18n-micro/astro 1.2.0 → 1.2.1
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/dist/client/core.d.ts +1 -1
- package/dist/client/index.d.ts +3 -3
- package/dist/client/index.js +9 -9
- package/dist/client/preact.d.ts +1 -1
- package/dist/client/preact.js +36 -21
- package/dist/client/react.d.ts +1 -1
- package/dist/client/react.js +35 -20
- package/dist/client/svelte.d.ts +1 -1
- package/dist/client/svelte.js +8 -14
- package/dist/client/vue.d.ts +1 -1
- package/dist/client/vue.js +6 -12
- package/dist/composer.d.ts +1 -1
- package/dist/env.d.ts +0 -2
- package/dist/index.cjs +2 -2
- package/dist/index.d.ts +11 -11
- package/dist/index.mjs +140 -149
- package/dist/integration.d.ts +1 -1
- package/dist/middleware.d.ts +2 -2
- package/dist/router/adapter.d.ts +1 -1
- package/dist/utils.d.ts +2 -2
- package/package.json +4 -4
- package/src/client/core.ts +5 -11
- package/src/client/index.ts +6 -8
- package/src/client/preact.tsx +74 -61
- package/src/client/react.tsx +73 -61
- package/src/client/svelte.ts +9 -25
- package/src/client/vue.ts +7 -23
- package/src/components/i18n-link.astro +3 -3
- package/src/components/i18n-switcher.astro +3 -3
- package/src/components/i18n-t.astro +3 -13
- package/src/composer.ts +2 -7
- package/src/env.d.ts +0 -2
- package/src/index.ts +35 -42
- package/src/integration.ts +5 -10
- package/src/load-translations.ts +11 -13
- package/src/middleware.ts +12 -22
- package/src/router/adapter.ts +7 -25
- package/src/routing.ts +3 -17
- package/src/utils.ts +10 -19
package/dist/client/core.d.ts
CHANGED
package/dist/client/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { translate, hasTranslation } from './core';
|
|
2
1
|
export type { I18nState } from './core';
|
|
3
|
-
export {
|
|
4
|
-
export { I18nProvider, useAstroI18n as useAstroI18nReact } from './react';
|
|
2
|
+
export { hasTranslation, translate } from './core';
|
|
5
3
|
export { I18nProvider as I18nProviderPreact, useAstroI18n as useAstroI18nPreact } from './preact';
|
|
4
|
+
export { I18nProvider, useAstroI18n as useAstroI18nReact } from './react';
|
|
6
5
|
export { createI18nStore, useAstroI18n as useAstroI18nSvelte } from './svelte';
|
|
6
|
+
export { provideI18n, useAstroI18n as useAstroI18nVue } from './vue';
|
package/dist/client/index.js
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import { h as s, t as o } from "../core-D32Y48CN.js";
|
|
2
|
-
import {
|
|
2
|
+
import { I18nProvider as a, useAstroI18n as n } from "./preact.js";
|
|
3
3
|
import { I18nProvider as u, useAstroI18n as A } from "./react.js";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import { createI18nStore as f, useAstroI18n as i } from "./svelte.js";
|
|
5
|
+
import { provideI18n as v, useAstroI18n as x } from "./vue.js";
|
|
6
6
|
export {
|
|
7
7
|
u as I18nProvider,
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
a as I18nProviderPreact,
|
|
9
|
+
f as createI18nStore,
|
|
10
10
|
s as hasTranslation,
|
|
11
|
-
|
|
11
|
+
v as provideI18n,
|
|
12
12
|
o as translate,
|
|
13
|
-
|
|
13
|
+
n as useAstroI18nPreact,
|
|
14
14
|
A as useAstroI18nReact,
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
i as useAstroI18nSvelte,
|
|
16
|
+
x as useAstroI18nVue
|
|
17
17
|
};
|
package/dist/client/preact.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import { CleanTranslation, Params, TranslationKey } from '@i18n-micro/types';
|
|
1
2
|
import { ComponentChildren } from 'preact';
|
|
2
3
|
import { I18nClientProps } from '../utils';
|
|
3
4
|
import { I18nState } from './core';
|
|
4
|
-
import { Params, TranslationKey, CleanTranslation } from '@i18n-micro/types';
|
|
5
5
|
/**
|
|
6
6
|
* Провайдер для i18n в Preact островах
|
|
7
7
|
*/
|
package/dist/client/preact.js
CHANGED
|
@@ -1,33 +1,48 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
const s = new
|
|
6
|
-
const [l] =
|
|
1
|
+
import { FormatService as g, defaultPlural as w } from "@i18n-micro/core";
|
|
2
|
+
import { createContext as x, createElement as L } from "preact";
|
|
3
|
+
import { useState as P, useContext as S, useMemo as a } from "preact/hooks";
|
|
4
|
+
import { t as C, h as A } from "../core-D32Y48CN.js";
|
|
5
|
+
const s = new g(), i = x(null), F = ({ children: t, value: o }) => {
|
|
6
|
+
const [l] = P(() => ({
|
|
7
7
|
locale: o.locale,
|
|
8
8
|
fallbackLocale: o.fallbackLocale,
|
|
9
9
|
translations: o.translations,
|
|
10
10
|
currentRoute: o.currentRoute
|
|
11
11
|
}));
|
|
12
|
-
return
|
|
12
|
+
return L(i.Provider, { value: l }, t);
|
|
13
13
|
};
|
|
14
14
|
function M() {
|
|
15
|
-
const t =
|
|
15
|
+
const t = S(i);
|
|
16
16
|
if (!t)
|
|
17
17
|
throw new Error("useAstroI18n must be used within an I18nProvider");
|
|
18
|
-
const o = a(
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
u
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
18
|
+
const o = a(
|
|
19
|
+
() => (r, e, n, c) => C(t, r, e, n, c),
|
|
20
|
+
[t]
|
|
21
|
+
), l = a(
|
|
22
|
+
() => (r, e, n, c) => o(r, e, n, c)?.toString() ?? n ?? r,
|
|
23
|
+
[o]
|
|
24
|
+
), m = a(
|
|
25
|
+
() => (r, e, n) => {
|
|
26
|
+
const { count: c, ...u } = typeof e == "number" ? { count: e } : e;
|
|
27
|
+
if (c === void 0)
|
|
28
|
+
return n ?? r;
|
|
29
|
+
const d = (v, I, h) => o(v, I, h);
|
|
30
|
+
return w(r, Number.parseInt(c.toString(), 10), u, t.locale, d) ?? n ?? r;
|
|
31
|
+
},
|
|
32
|
+
[o, t]
|
|
33
|
+
), f = a(
|
|
34
|
+
() => (r, e) => s.formatNumber(r, t.locale, e),
|
|
35
|
+
[t.locale]
|
|
36
|
+
), b = a(
|
|
37
|
+
() => (r, e) => s.formatDate(r, t.locale, e),
|
|
38
|
+
[t.locale]
|
|
39
|
+
), p = a(
|
|
40
|
+
() => (r, e) => s.formatRelativeTime(r, t.locale, e),
|
|
41
|
+
[t.locale]
|
|
42
|
+
), R = a(
|
|
43
|
+
() => (r, e) => A(t, r, e),
|
|
44
|
+
[t]
|
|
45
|
+
);
|
|
31
46
|
return {
|
|
32
47
|
// Translation methods
|
|
33
48
|
t: o,
|
package/dist/client/react.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { CleanTranslation, Params, TranslationKey } from '@i18n-micro/types';
|
|
1
2
|
import { default as React } from 'react';
|
|
2
3
|
import { I18nClientProps } from '../utils';
|
|
3
|
-
import { Params, TranslationKey, CleanTranslation } from '@i18n-micro/types';
|
|
4
4
|
/**
|
|
5
5
|
* Провайдер для i18n в React островах
|
|
6
6
|
*/
|
package/dist/client/react.js
CHANGED
|
@@ -1,33 +1,48 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
const s = new
|
|
1
|
+
import { FormatService as g, defaultPlural as w } from "@i18n-micro/core";
|
|
2
|
+
import x, { createContext as L, useState as P, useContext as S, useMemo as a } from "react";
|
|
3
|
+
import { t as C, h as A } from "../core-D32Y48CN.js";
|
|
4
|
+
const s = new g(), i = L(null);
|
|
5
5
|
function D({ children: t, value: o }) {
|
|
6
|
-
const [l] =
|
|
6
|
+
const [l] = P(() => ({
|
|
7
7
|
locale: o.locale,
|
|
8
8
|
fallbackLocale: o.fallbackLocale,
|
|
9
9
|
translations: o.translations,
|
|
10
10
|
currentRoute: o.currentRoute
|
|
11
11
|
}));
|
|
12
|
-
return
|
|
12
|
+
return x.createElement(i.Provider, { value: l }, t);
|
|
13
13
|
}
|
|
14
14
|
function F() {
|
|
15
|
-
const t =
|
|
15
|
+
const t = S(i);
|
|
16
16
|
if (!t)
|
|
17
17
|
throw new Error("useAstroI18n must be used within an I18nProvider");
|
|
18
|
-
const o = a(
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
u
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
18
|
+
const o = a(
|
|
19
|
+
() => (e, r, n, c) => C(t, e, r, n, c),
|
|
20
|
+
[t]
|
|
21
|
+
), l = a(
|
|
22
|
+
() => (e, r, n, c) => o(e, r, n, c)?.toString() ?? n ?? e,
|
|
23
|
+
[o]
|
|
24
|
+
), m = a(
|
|
25
|
+
() => (e, r, n) => {
|
|
26
|
+
const { count: c, ...u } = typeof r == "number" ? { count: r } : r;
|
|
27
|
+
if (c === void 0)
|
|
28
|
+
return n ?? e;
|
|
29
|
+
const d = (v, I, h) => o(v, I, h);
|
|
30
|
+
return w(e, Number.parseInt(c.toString(), 10), u, t.locale, d) ?? n ?? e;
|
|
31
|
+
},
|
|
32
|
+
[o, t]
|
|
33
|
+
), f = a(
|
|
34
|
+
() => (e, r) => s.formatNumber(e, t.locale, r),
|
|
35
|
+
[t.locale]
|
|
36
|
+
), b = a(
|
|
37
|
+
() => (e, r) => s.formatDate(e, t.locale, r),
|
|
38
|
+
[t.locale]
|
|
39
|
+
), R = a(
|
|
40
|
+
() => (e, r) => s.formatRelativeTime(e, t.locale, r),
|
|
41
|
+
[t.locale]
|
|
42
|
+
), p = a(
|
|
43
|
+
() => (e, r) => A(t, e, r),
|
|
44
|
+
[t]
|
|
45
|
+
);
|
|
31
46
|
return {
|
|
32
47
|
// Translation methods
|
|
33
48
|
t: o,
|
package/dist/client/svelte.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import { CleanTranslation, Params, TranslationKey } from '@i18n-micro/types';
|
|
1
2
|
import { Writable } from 'svelte/store';
|
|
2
3
|
import { I18nClientProps } from '../utils';
|
|
3
4
|
import { I18nState } from './core';
|
|
4
|
-
import { Params, TranslationKey, CleanTranslation } from '@i18n-micro/types';
|
|
5
5
|
/**
|
|
6
6
|
* Создает Svelte store для i18n состояния
|
|
7
7
|
*/
|
package/dist/client/svelte.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
const l = new
|
|
1
|
+
import { FormatService as R, defaultPlural as b } from "@i18n-micro/core";
|
|
2
|
+
import { writable as d, get as v } from "svelte/store";
|
|
3
|
+
import { h as L, t as S } from "../core-D32Y48CN.js";
|
|
4
|
+
const l = new R();
|
|
5
5
|
function F(o) {
|
|
6
|
-
return
|
|
6
|
+
return d({
|
|
7
7
|
locale: o.locale,
|
|
8
8
|
fallbackLocale: o.fallbackLocale,
|
|
9
9
|
translations: o.translations,
|
|
@@ -11,7 +11,7 @@ function F(o) {
|
|
|
11
11
|
});
|
|
12
12
|
}
|
|
13
13
|
function P(o) {
|
|
14
|
-
const n = () =>
|
|
14
|
+
const n = () => v(o), c = (t, e, r, a) => S(n(), t, e, r, a);
|
|
15
15
|
return {
|
|
16
16
|
// Store для реактивности в шаблонах (используйте $i18nStore в шаблонах)
|
|
17
17
|
store: o,
|
|
@@ -23,13 +23,7 @@ function P(o) {
|
|
|
23
23
|
if (u === void 0)
|
|
24
24
|
return r ?? t;
|
|
25
25
|
const i = (m, f, g) => c(m, f, g);
|
|
26
|
-
return
|
|
27
|
-
t,
|
|
28
|
-
Number.parseInt(u.toString(), 10),
|
|
29
|
-
s,
|
|
30
|
-
a.locale,
|
|
31
|
-
i
|
|
32
|
-
) ?? r ?? t;
|
|
26
|
+
return b(t, Number.parseInt(u.toString(), 10), s, a.locale, i) ?? r ?? t;
|
|
33
27
|
},
|
|
34
28
|
tn: (t, e) => {
|
|
35
29
|
const r = n();
|
|
@@ -43,7 +37,7 @@ function P(o) {
|
|
|
43
37
|
const r = n();
|
|
44
38
|
return l.formatRelativeTime(t, r.locale, e);
|
|
45
39
|
},
|
|
46
|
-
has: (t, e) =>
|
|
40
|
+
has: (t, e) => L(n(), t, e),
|
|
47
41
|
// Геттеры для текущего состояния (для использования в скриптах)
|
|
48
42
|
get locale() {
|
|
49
43
|
return n().locale;
|
package/dist/client/vue.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import { CleanTranslation, Params, TranslationKey } from '@i18n-micro/types';
|
|
1
2
|
import { Ref } from 'vue';
|
|
2
3
|
import { I18nClientProps } from '../utils';
|
|
3
4
|
import { I18nState } from './core';
|
|
4
|
-
import { Params, TranslationKey, CleanTranslation } from '@i18n-micro/types';
|
|
5
5
|
/**
|
|
6
6
|
* Инициализирует i18n провайдер для Vue острова
|
|
7
7
|
* Вызывайте в корневом компоненте острова
|
package/dist/client/vue.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { FormatService as wt, defaultPlural as yt } from "@i18n-micro/core";
|
|
2
|
+
import { h as St, t as Ot } from "../core-D32Y48CN.js";
|
|
3
3
|
// @__NO_SIDE_EFFECTS__
|
|
4
4
|
function Rt(e) {
|
|
5
5
|
const t = /* @__PURE__ */ Object.create(null);
|
|
@@ -1492,7 +1492,7 @@ function Jn() {
|
|
|
1492
1492
|
Yn();
|
|
1493
1493
|
}
|
|
1494
1494
|
process.env.NODE_ENV !== "production" && Jn();
|
|
1495
|
-
const me = new
|
|
1495
|
+
const me = new wt(), Et = /* @__PURE__ */ Symbol("i18n-astro");
|
|
1496
1496
|
function Gn(e) {
|
|
1497
1497
|
const t = sn({
|
|
1498
1498
|
locale: e.locale,
|
|
@@ -1506,7 +1506,7 @@ function Qn() {
|
|
|
1506
1506
|
const e = Cn(Et);
|
|
1507
1507
|
if (!e)
|
|
1508
1508
|
throw new Error("useAstroI18n must be used within a component that calls provideI18n");
|
|
1509
|
-
const t = (a, u, d, l) =>
|
|
1509
|
+
const t = (a, u, d, l) => Ot(e.value, a, u, d, l);
|
|
1510
1510
|
return {
|
|
1511
1511
|
// Translation methods
|
|
1512
1512
|
t,
|
|
@@ -1516,18 +1516,12 @@ function Qn() {
|
|
|
1516
1516
|
if (l === void 0)
|
|
1517
1517
|
return d ?? a;
|
|
1518
1518
|
const g = (P, bt, Nt) => t(P, bt, Nt);
|
|
1519
|
-
return
|
|
1520
|
-
a,
|
|
1521
|
-
Number.parseInt(l.toString(), 10),
|
|
1522
|
-
f,
|
|
1523
|
-
e.value.locale,
|
|
1524
|
-
g
|
|
1525
|
-
) ?? d ?? a;
|
|
1519
|
+
return yt(a, Number.parseInt(l.toString(), 10), f, e.value.locale, g) ?? d ?? a;
|
|
1526
1520
|
},
|
|
1527
1521
|
tn: (a, u) => me.formatNumber(a, e.value.locale, u),
|
|
1528
1522
|
td: (a, u) => me.formatDate(a, e.value.locale, u),
|
|
1529
1523
|
tdr: (a, u) => me.formatRelativeTime(a, e.value.locale, u),
|
|
1530
|
-
has: (a, u) =>
|
|
1524
|
+
has: (a, u) => St(e.value, a, u),
|
|
1531
1525
|
// Reactive locale state
|
|
1532
1526
|
locale: ve({
|
|
1533
1527
|
get: () => e.value.locale,
|
package/dist/composer.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { BaseI18n, TranslationStorage } from '@i18n-micro/core';
|
|
2
|
-
import {
|
|
2
|
+
import { PluralFunc, Translations } from '@i18n-micro/types';
|
|
3
3
|
export interface AstroI18nOptions {
|
|
4
4
|
locale: string;
|
|
5
5
|
fallbackLocale?: string;
|
package/dist/env.d.ts
CHANGED
package/dist/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const T=require("@i18n-micro/core"),b=require("node:fs"),I=require("node:path");class j extends T.BaseI18n{constructor(e){const s=e._storage||{translations:new Map};if(super({storage:s,plural:e.plural,missingWarn:e.missingWarn,missingHandler:e.missingHandler}),this.initialMessages={},this.storage=s,this._locale=e.locale,this._fallbackLocale=e.fallbackLocale||e.locale,this._currentRoute="general",e.messages){this.initialMessages={...e.messages};for(const[a,i]of Object.entries(e.messages))this.helper.loadTranslations(a,i)}}cloneStorage(e){const s=new Map;for(const[a,i]of e.translations)s.set(a,{...i});return{translations:s}}clone(e){const s=this.cloneStorage(this.storage);return new j({locale:e||this._locale,fallbackLocale:this._fallbackLocale,plural:this.pluralFunc,missingWarn:this.missingWarn,missingHandler:this.missingHandler,_storage:s})}get locale(){return this._locale}set locale(e){this._locale=e}get fallbackLocale(){return this._fallbackLocale}set fallbackLocale(e){this._fallbackLocale=e}setRoute(e){this._currentRoute=e}getLocale(){return this._locale}getFallbackLocale(){return this._fallbackLocale}getRoute(){return this._currentRoute}getRouteTranslations(e,s){const a=`${e}:${s}`;return this.storage.translations.get(a)??null}addTranslations(e,s,a=!0){super.loadTranslationsCore(e,s,a)}addRouteTranslations(e,s,a,i=!0){super.loadRouteTranslationsCore(e,s,a,i)}mergeTranslations(e,s,a){this.helper.mergeTranslation(e,s,a,!0)}mergeGlobalTranslations(e,s){this.helper.mergeGlobalTranslation(e,s,!0)}clearCache(){const e={...this.initialMessages};if(super.clearCache(),Object.keys(e).length>0)for(const[s,a]of Object.entries(e))this.helper.loadTranslations(s,a)}}let $=null;function D(){return $}function C(n){const{locale:e,fallbackLocale:s,translationDir:a,routingStrategy:i}=n;return $=i||null,{name:"@i18n-micro/astro",hooks:{"astro:config:setup":c=>{const{updateConfig:f}=c,t="virtual:i18n-micro/config",l
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const T=require("@i18n-micro/core"),b=require("node:fs"),I=require("node:path");class j extends T.BaseI18n{constructor(e){const s=e._storage||{translations:new Map};if(super({storage:s,plural:e.plural,missingWarn:e.missingWarn,missingHandler:e.missingHandler}),this.initialMessages={},this.storage=s,this._locale=e.locale,this._fallbackLocale=e.fallbackLocale||e.locale,this._currentRoute="general",e.messages){this.initialMessages={...e.messages};for(const[a,i]of Object.entries(e.messages))this.helper.loadTranslations(a,i)}}cloneStorage(e){const s=new Map;for(const[a,i]of e.translations)s.set(a,{...i});return{translations:s}}clone(e){const s=this.cloneStorage(this.storage);return new j({locale:e||this._locale,fallbackLocale:this._fallbackLocale,plural:this.pluralFunc,missingWarn:this.missingWarn,missingHandler:this.missingHandler,_storage:s})}get locale(){return this._locale}set locale(e){this._locale=e}get fallbackLocale(){return this._fallbackLocale}set fallbackLocale(e){this._fallbackLocale=e}setRoute(e){this._currentRoute=e}getLocale(){return this._locale}getFallbackLocale(){return this._fallbackLocale}getRoute(){return this._currentRoute}getRouteTranslations(e,s){const a=`${e}:${s}`;return this.storage.translations.get(a)??null}addTranslations(e,s,a=!0){super.loadTranslationsCore(e,s,a)}addRouteTranslations(e,s,a,i=!0){super.loadRouteTranslationsCore(e,s,a,i)}mergeTranslations(e,s,a){this.helper.mergeTranslation(e,s,a,!0)}mergeGlobalTranslations(e,s){this.helper.mergeGlobalTranslation(e,s,!0)}clearCache(){const e={...this.initialMessages};if(super.clearCache(),Object.keys(e).length>0)for(const[s,a]of Object.entries(e))this.helper.loadTranslations(s,a)}}let $=null;function D(){return $}function C(n){const{locale:e,fallbackLocale:s,translationDir:a,routingStrategy:i}=n;return $=i||null,{name:"@i18n-micro/astro",hooks:{"astro:config:setup":c=>{const{updateConfig:f}=c,t="virtual:i18n-micro/config",l=`\0${t}`,r={defaultLocale:e,fallbackLocale:s||e,locales:n.locales||[],localeCodes:(n.locales||[]).map(o=>o.code),translationDir:a||null,autoDetect:n.autoDetect??!0,redirectToDefault:n.redirectToDefault??!1,localeCookie:n.localeCookie===null?null:n.localeCookie||"i18n-locale",missingWarn:n.missingWarn??!1};f({vite:{plugins:[{name:"vite-plugin-i18n-micro-config",resolveId(o){if(o===t)return l},load(o){if(o===l)return`export const config = ${JSON.stringify(r)}`}}]}})},"astro:config:done":c=>{const{injectTypes:f}=c;f({filename:"i18n-micro-env.d.ts",content:`
|
|
2
2
|
/// <reference types="@i18n-micro/astro/env" />
|
|
3
3
|
|
|
4
4
|
declare module 'virtual:i18n-micro/config' {
|
|
@@ -14,4 +14,4 @@
|
|
|
14
14
|
missingWarn: boolean | null;
|
|
15
15
|
}
|
|
16
16
|
}
|
|
17
|
-
`})}}}}function N(n){return new j(n)}function q(n){const{i18n:e,defaultLocale:s,locales:a,localeObjects:i,autoDetect:c=!0,redirectToDefault:f=!1,routingStrategy:t}=n,l=t||D();return async(r,o)=>{if(r.locals.locale&&r.locals.i18n)return o();const u=r.url,h=u.pathname;if(!l){const S=e.clone(s),O=h==="/"||h===""?"index":h.split("/").filter(Boolean).join("-");return S.setRoute(O),r.locals.i18n=S,r.locals.locale=s,r.locals.defaultLocale=s,r.locals.locales=i||a.map(_=>({code:_})),r.locals.currentUrl=u,o()}const d={...l,getCurrentPath:()=>h,getRoute:()=>({fullPath:u.pathname+u.search,query:Object.fromEntries(u.searchParams)})},g=h.split("/").filter(Boolean)[0],p=g!==void 0&&a.includes(g);let P;p&&g?P=g:d.getLocaleFromPath?P=d.getLocaleFromPath(h,s,a):P=s;const L=e.clone(P),y=d.getRouteName?d.getRouteName(h,a):"general";return L.setRoute(y),r.locals.i18n=L,r.locals.locale=P,r.locals.defaultLocale=s,r.locals.locales=i||a.map(S=>({code:S})),r.locals.currentUrl=u,r.locals.routingStrategy=d,o()}}function
|
|
17
|
+
`})}}}}function N(n){return new j(n)}function F(n){const{translationDir:e,rootDir:s=process.cwd(),disablePageLocales:a=!1}=n,i=I.resolve(s,e);if(!b.existsSync(i))return console.warn(`[i18n] Translation directory not found: ${i}`),{general:{},routes:{}};const c={},f={},t=(l,r="")=>{if(!b.existsSync(l))return;const o=b.readdirSync(l);for(const u of o){const h=I.join(l,u);if(b.statSync(h).isDirectory())u==="pages"&&!a?t(h,""):r||a?t(h,r):t(h,u);else if(u.endsWith(".json")){const m=u.replace(".json","");try{const g=b.readFileSync(h,"utf-8"),p=JSON.parse(g);r&&!a?(f[r]||(f[r]={}),f[r][m]=p):c[m]=p}catch(g){console.error(`[i18n] Failed to load translation file: ${h}`,g)}}}};return t(i),{general:c,routes:f}}function q(n,e){const{general:s,routes:a}=F(e);for(const[i,c]of Object.entries(s))n.addTranslations(i,c,!1);for(const[i,c]of Object.entries(a))for(const[f,t]of Object.entries(c))n.addRouteTranslations(f,i,t,!1)}function M(n){const{i18n:e,defaultLocale:s,locales:a,localeObjects:i,autoDetect:c=!0,redirectToDefault:f=!1,routingStrategy:t}=n,l=t||D();return async(r,o)=>{if(r.locals.locale&&r.locals.i18n)return o();const u=r.url,h=u.pathname;if(!l){const S=e.clone(s),O=h==="/"||h===""?"index":h.split("/").filter(Boolean).join("-");return S.setRoute(O),r.locals.i18n=S,r.locals.locale=s,r.locals.defaultLocale=s,r.locals.locales=i||a.map(_=>({code:_})),r.locals.currentUrl=u,o()}const d={...l,getCurrentPath:()=>h,getRoute:()=>({fullPath:u.pathname+u.search,query:Object.fromEntries(u.searchParams)})},g=h.split("/").filter(Boolean)[0],p=g!==void 0&&a.includes(g);let P;p&&g?P=g:d.getLocaleFromPath?P=d.getLocaleFromPath(h,s,a):P=s;const L=e.clone(P),y=d.getRouteName?d.getRouteName(h,a):"general";return L.setRoute(y),r.locals.i18n=L,r.locals.locale=P,r.locals.defaultLocale=s,r.locals.locales=i||a.map(S=>({code:S})),r.locals.currentUrl=u,r.locals.routingStrategy=d,o()}}function A(n){const e=[],s=n.split(",");for(const a of s){const[i,c="1.0"]=a.trim().split(";q=");if(Number.parseFloat(c)>0&&i){const t=i.split("-")[0]?.toLowerCase();t&&(e.push(t),i!==t&&e.push(i.toLowerCase()))}}return e}function W(n,e,s,a,i,c="i18n-locale"){const f=D();let t=a;if(f?.getLocaleFromPath)t=f.getLocaleFromPath(n,a,i);else{const r=n.split("/").filter(Boolean)[0];r&&i.includes(r)&&(t=r)}if(c!==null&&t===a&&e.get(c)){const l=e.get(c)?.value;l&&i.includes(l)&&(t=l)}if(t===a)try{const l=s.get("accept-language");if(l){const r=A(l);for(const o of r)if(i.includes(o)){t=o;break}}}catch{}return t}function z(n,e,s){const a=n.map(o=>o.code),i=(o,u=[])=>{const h=o.replace(/^\//,"").replace(/\/$/,"");if(!h)return"index";const d=h.split("/").filter(Boolean),m=d[0];return m&&u.includes(m)&&d.shift(),d.length===0?"index":d.join("-")},c=(o,u="en",h=[])=>{const m=o.split("/").filter(Boolean)[0];return m&&h.includes(m)?m:u},f=(o,u,h=[],d)=>{const m=o.split("/").filter(Boolean),g=m[0];return g&&h.includes(g)&&m.shift(),(u!==d||d===void 0)&&m.unshift(u),`/${m.join("/")}`},t=(o,u,h=[],d)=>{const g=(o.replace(/^\//,"").replace(/\/$/,"")||"").split("/").filter(Boolean),p=g[0];return p&&h.includes(p)&&g.shift(),(u!==d||d===void 0)&&g.unshift(u),`/${g.join("/")}`};return{getCurrentPath:()=>s?s().pathname:typeof window<"u"?window.location.pathname:"/",getRouteName:i,getLocaleFromPath:c,switchLocalePath:f,localizePath:t,removeLocaleFromPath:(o,u=[])=>{const h=o.split("/").filter(Boolean),d=h[0];return d&&u.includes(d)&&h.shift(),`/${h.join("/")}`},resolvePath:(o,u)=>{const h=typeof o=="string"?o:o.path||"/";return t(h,u,a,e)},getRoute:()=>{if(s){const o=s();return{fullPath:o.pathname+o.search,query:Object.fromEntries(o.searchParams)}}if(typeof window<"u"){const o=new URL(window.location.href);return{fullPath:o.pathname+o.search,query:Object.fromEntries(o.searchParams)}}return{fullPath:"/",query:{}}},push:o=>{typeof window<"u"&&(window.location.href=o.path)},replace:o=>{typeof window<"u"&&window.location.replace(o.path)}}}function H(n,e=[]){const s=n.replace(/^\//,"").replace(/\/$/,"");if(!s)return"index";const a=s.split("/").filter(Boolean),i=a[0];return i&&e.includes(i)&&a.shift(),a.length===0?"index":a.join("-")}function G(n,e="en",s=[]){const i=n.split("/").filter(Boolean)[0];return i&&s.includes(i)?i:e}function U(n,e,s=[],a){const i=n.split("/").filter(Boolean),c=i[0];return c&&s.includes(c)&&i.shift(),(e!==a||a===void 0)&&i.unshift(e),`/${i.join("/")}`}function E(n,e,s=[],a){const c=(n.replace(/^\//,"").replace(/\/$/,"")||"").split("/").filter(Boolean),f=c[0];return f&&s.includes(f)&&c.shift(),(e!==a||a===void 0)&&c.unshift(e),`/${c.join("/")}`}function J(n,e=[]){const s=n.split("/").filter(Boolean),a=s[0];return a&&e.includes(a)&&s.shift(),`/${s.join("/")}`}function v(n){const e=n.locals.i18n;if(!e)throw new Error("i18n instance not found. Make sure i18n middleware is configured.");return e}function w(n){return n.locals.locale||"en"}function R(n){return n.locals.defaultLocale||"en"}function k(n){return n.locals.locales||[]}function B(n){return n.locals.routingStrategy||null}function V(n){const e=v(n),s=w(n),a=R(n),i=k(n),c=i.map(t=>t.code),f=B(n);return{locale:s,defaultLocale:a,locales:i,t:(t,l,r,o)=>e.t(t,l,r,o),ts:(t,l,r,o)=>e.ts(t,l,r,o),tc:(t,l,r)=>e.tc(t,l,r),tn:(t,l)=>e.tn(t,l),td:(t,l)=>e.td(t,l),tdr:(t,l)=>e.tdr(t,l),has:(t,l)=>e.has(t,l),getRoute:()=>e.getRoute(),getRouteName:t=>{const l=t||n.url.pathname;if(f?.getRouteName)return f.getRouteName(l,c);const r=l.replace(/^\//,"").replace(/\/$/,"");if(!r)return"index";const o=r.split("/").filter(Boolean),u=o[0];return u&&c.includes(u)&&o.shift(),o.length===0?"index":o.join("-")},getLocaleFromPath:t=>{const l=t||n.url.pathname;if(f?.getLocaleFromPath)return f.getLocaleFromPath(l,a,c);const o=l.split("/").filter(Boolean)[0];return o&&c.includes(o)?o:a},switchLocalePath:t=>{if(f?.switchLocalePath)return f.switchLocalePath(n.url.pathname,t,c,a);const l=n.url.pathname.split("/").filter(Boolean),r=l[0];return r&&c.includes(r)&&l.shift(),t!==a&&l.unshift(t),`/${l.join("/")}`},localizePath:(t,l)=>{if(f?.localizePath)return f.localizePath(t,l||s,c,a);const o=(t.replace(/^\//,"").replace(/\/$/,"")||"").split("/").filter(Boolean),u=o[0];return u&&c.includes(u)&&o.shift(),l&&l!==a&&o.unshift(l),`/${o.join("/")}`},getI18n:()=>e,getBasePath:t=>{const o=(t||n.url).pathname.split("/").filter(Boolean),u=o[0];return u&&c.includes(u)&&o.shift(),o.length>0?`/${o.join("/")}`:"/"},addTranslations:(t,l,r=!0)=>{e.addTranslations(t,l,r)},addRouteTranslations:(t,l,r,o=!0)=>{e.addRouteTranslations(t,l,r,o)},mergeTranslations:(t,l,r)=>{e.mergeTranslations(t,l,r)},mergeGlobalTranslations:(t,l)=>{e.mergeGlobalTranslations(t,l)},clearCache:()=>{e.clearCache()}}}function K(n,e={}){const{baseUrl:s="/",addDirAttribute:a=!0,addSeoAttributes:i=!0}=e,c=w(n),f=R(n),t=k(n),l=t.find(g=>g.code===c);if(!l)return{htmlAttrs:{},link:[],meta:[]};const r=l.iso||c,o=l.dir||"auto",u={htmlAttrs:{lang:r,...a?{dir:o}:{}},link:[],meta:[]};if(!i)return u;const h=`${s}${n.url.pathname}`;u.link.push({rel:"canonical",href:h});const d=B(n),m=t.map(g=>g.code);for(const g of t){if(g.code===c)continue;let p=n.url.pathname;if(d?.switchLocalePath)p=d.switchLocalePath(n.url.pathname,g.code,m,f);else{const L=n.url.pathname.split("/").filter(Boolean),y=L[0];y&&m.includes(y)&&L.shift(),g.code!==f&&L.unshift(g.code),p=`/${L.join("/")}`}const P=`${s}${p}`;u.link.push({rel:"alternate",href:P,hreflang:g.code}),g.iso&&g.iso!==g.code&&u.link.push({rel:"alternate",href:P,hreflang:g.iso})}u.meta.push({property:"og:locale",content:r}),u.meta.push({property:"og:url",content:h});for(const g of t)g.code!==c&&u.meta.push({property:"og:locale:alternate",content:g.iso||g.code});return u}function Q(n,e,s){const a=e.split(".");let i=n;for(let f=0;f<a.length-1;f++){const t=a[f];i[t]||(i[t]={}),i=i[t]}const c=a[a.length-1];c!==void 0&&(i[c]=s)}function X(n,e){const s=v(n),a=w(n),i=R(n),c=s.getRoute(),f={};if(e&&e.length>0){const t={};for(const l of e){const r=s.t(l,void 0,void 0,c);r!=null&&r!==l&&Q(t,l,r)}Object.keys(t).length>0&&(f[c]=t)}else{const t=s.getRouteTranslations(a,c);t&&(f[c]=t)}return{locale:a,fallbackLocale:i,currentRoute:c,translations:f}}Object.defineProperty(exports,"FormatService",{enumerable:!0,get:()=>T.FormatService});Object.defineProperty(exports,"defaultPlural",{enumerable:!0,get:()=>T.defaultPlural});Object.defineProperty(exports,"interpolate",{enumerable:!0,get:()=>T.interpolate});exports.AstroI18n=j;exports.createAstroRouterAdapter=z;exports.createI18n=N;exports.createI18nMiddleware=M;exports.detectLocale=W;exports.getDefaultLocale=R;exports.getI18n=v;exports.getI18nProps=X;exports.getLocale=w;exports.getLocaleFromPath=G;exports.getLocales=k;exports.getRouteName=H;exports.i18nIntegration=C;exports.loadTranslationsFromDir=F;exports.loadTranslationsIntoI18n=q;exports.localizePath=E;exports.removeLocaleFromPath=J;exports.switchLocalePath=U;exports.useI18n=V;exports.useLocaleHead=K;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { defaultPlural, FormatService, interpolate } from '@i18n-micro/core';
|
|
2
|
+
export type { CleanTranslation, Getter, Locale, LocaleCode, Params, PluralFunc, Translations, } from '@i18n-micro/types';
|
|
2
3
|
export { AstroI18n, type AstroI18nOptions } from './composer';
|
|
3
|
-
export { createI18nMiddleware, detectLocale } from './middleware';
|
|
4
|
-
export type { I18nMiddlewareOptions } from './middleware';
|
|
5
|
-
export { useI18n, getI18n, getLocale, getDefaultLocale, getLocales, useLocaleHead, getI18nProps, } from './utils';
|
|
6
|
-
export type { LocaleHeadOptions, LocaleHeadResult, I18nClientProps } from './utils';
|
|
7
|
-
export type { I18nRoutingStrategy } from './router/types';
|
|
8
|
-
export { createAstroRouterAdapter } from './router/adapter';
|
|
9
|
-
export { getRouteName, getLocaleFromPath, switchLocalePath, localizePath, removeLocaleFromPath, } from './routing';
|
|
10
|
-
export type { Translations, Params, PluralFunc, Getter, Locale, LocaleCode, CleanTranslation, } from '@i18n-micro/types';
|
|
11
|
-
export { interpolate, FormatService, defaultPlural } from '@i18n-micro/core';
|
|
12
4
|
export type { I18nIntegrationOptions } from './integration';
|
|
5
|
+
export { createI18n, i18nIntegration } from './integration';
|
|
6
|
+
export type { LoadedTranslations, LoadTranslationsOptions } from './load-translations';
|
|
13
7
|
export { loadTranslationsFromDir, loadTranslationsIntoI18n, } from './load-translations';
|
|
14
|
-
export type {
|
|
8
|
+
export type { I18nMiddlewareOptions } from './middleware';
|
|
9
|
+
export { createI18nMiddleware, detectLocale } from './middleware';
|
|
10
|
+
export { createAstroRouterAdapter } from './router/adapter';
|
|
11
|
+
export type { I18nRoutingStrategy } from './router/types';
|
|
12
|
+
export { getLocaleFromPath, getRouteName, localizePath, removeLocaleFromPath, switchLocalePath, } from './routing';
|
|
13
|
+
export type { I18nClientProps, LocaleHeadOptions, LocaleHeadResult } from './utils';
|
|
14
|
+
export { getDefaultLocale, getI18n, getI18nProps, getLocale, getLocales, useI18n, useLocaleHead, } from './utils';
|