astro-i18nya 0.2.3 → 0.2.5

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 CHANGED
@@ -4,8 +4,8 @@ I18n support for astro.
4
4
 
5
5
  ## Features
6
6
 
7
- - Integration with `i18nya` and `astro`
8
- - A `<Trans />` component that works better than the one in `react-i18next`!
7
+ - Integration with [`i18nya`](https://www.npmjs.com/package/i18nya) and [`astro`](https://astro.build/)
8
+ - A `<Trans />` component that works better than the one in [`react-i18next`](https://react.i18next.com/latest/trans-component)!
9
9
 
10
10
  ## Installation
11
11
 
@@ -42,12 +42,26 @@ Then for all pages in `src/pages/[...lang]/*.astro`:
42
42
  import i18nya, { makeT } from "../../i18n.ts";
43
43
  import { makeGetStaticPaths } from "astro-i18nya";
44
44
  const t = makeT(Astro.params.lang);
45
- // generate paths only for languages in your `[...langs]/` folder!
45
+ // generate paths only for languages in your `langs/` folder!
46
46
  export const getStaticPaths = makeGetStaticPaths(i18nya);
47
47
  ```
48
48
 
49
+ ## Examples
50
+
51
+ See [`hello-astro`](https://github.com/FyraLabs/i18nya/tree/main/examples/hello-astro).
52
+
49
53
  ## Trans
50
54
 
55
+ This requires `experimentalReactChildren` in `astro.config.mjs`:
56
+ ```
57
+ export default defineConfig({
58
+ integrations: [
59
+ react({ experimentalReactChildren: true }),
60
+ astro_i18nya(i18nya),
61
+ ],
62
+ });
63
+ ```
64
+
51
65
  ```tsx
52
66
  <Trans t={t("test", { user: "John" })}>
53
67
  <b />
@@ -58,6 +72,10 @@ export const getStaticPaths = makeGetStaticPaths(i18nya);
58
72
  With `"test": "Hello <1>{{user}}</1>, welcome to <2><1>my site</1></2>."`, the above element will become:
59
73
 
60
74
  ```html
61
- <b>Hello John</b>, welcome to <a href="https://example.com"><b>my site</b></a
62
- >.
75
+ Hello <b>John</b>, welcome to <a href="https://example.com"><b>my site</b></a>.
63
76
  ```
77
+
78
+ ## `prefixDefaultLocale`
79
+
80
+ Pass `prefixDefaultLocale: true` to `astro_i18nya()` and `makeGetStaticPaths()`. See their respective JSDoc for more info.
81
+
@@ -1 +1 @@
1
- {"version":3,"file":"Trans.d.ts","sourceRoot":"","sources":["../src/Trans.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAqB,SAAS,EAAE,MAAM,OAAO,CAAC;AAE1D,KAAK,KAAK,GAAG;IACX,QAAQ,EAAE,SAAS,CAAC;IACpB,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;GAsBG;0CAC+B,KAAK;AAAvC,wBAsDsC"}
1
+ {"version":3,"file":"Trans.d.ts","sourceRoot":"","sources":["../src/Trans.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAqB,SAAS,EAAE,MAAM,OAAO,CAAC;AAE1D,KAAK,KAAK,GAAG;IACX,QAAQ,EAAE,SAAS,CAAC;IACpB,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;GAsBG;0CAC+B,KAAK;AAAvC,wBAyDsC"}
package/dist/Trans.js CHANGED
@@ -36,7 +36,10 @@ export default (({ children, t }) => {
36
36
  const tagStack = [];
37
37
  for (let ch_idx = 0; ch_idx < t.length;) {
38
38
  if (t.substring(ch_idx, ch_idx + 2) == "\\<") {
39
- elms.push("<");
39
+ if (typeof elms[elms.length - 1] === "string")
40
+ elms[elms.length - 1] += "<";
41
+ else
42
+ elms.push("<");
40
43
  ch_idx += 2;
41
44
  continue;
42
45
  }
package/dist/Trans.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Trans.js","sourceRoot":"","sources":["../src/Trans.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Trans.js","sourceRoot":"","sources":["../src/Trans.tsx"],"names":[],"mappings":";AAAA,oDAAoD;AACpD,4BAA4B;AAE5B,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAQ/D;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAe,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAS,EAAE,EAAE;IACzC,2DAA2D;IAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CACvB,GAAG,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAC9D,CAAC;IACF,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3E,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;QACpC,OAAO,CAAC,CAAC,CAAC,eAAe;IAC3B,CAAC;IAED,MAAM,IAAI,GAAgB,EAAE,CAAC,CAAC,6BAA6B;IAC3D,MAAM,QAAQ,GAAG,EAAE,CAAC;IACpB,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC;QACxC,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC;YAC7C,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,QAAQ;gBAC3C,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC;;gBAE7B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjB,MAAM,IAAI,CAAC,CAAC;YACZ,SAAS;QACX,CAAC;QACD,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;YAC5C,IAAI,CAAC,GAAG,CAAC,CAAC;YACV,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,MAAM;gBAAC,CAAC;YACxD,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACtE,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;gBAC/C,SAAS;YACX,CAAC;YACD,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC;YAC9B,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;gBACb,OAAO,CAAC,CAAC,CAAC,eAAe;YAC3B,CAAC;YACD,IAAI,CAAC,IAAI,CACP,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CACpE,CAAC;YACF,SAAS;QACX,CAAC;QACD,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;YACrB,IAAI,CAAC,GAAG,CAAC,CAAC;YACV,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,MAAM;gBAAC,CAAC;YACxD,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAClE,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;gBAC/C,SAAS;YACX,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YAC1C,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,+EAA+E;YAC9F,SAAS;QACX,CAAC;QACD,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;YAC9C,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QACvC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IACD,OAAO,4BAAG,IAAI,GAAI,CAAC;AACrB,CAAC,CAAoC,CAAC"}
package/dist/index.d.ts CHANGED
@@ -3,5 +3,14 @@ import type { AstroIntegration } from "astro";
3
3
  import Trans from "./Trans.js";
4
4
  import { listLang, getLangName, makeGetStaticPaths } from "./util.js";
5
5
  export { Trans, listLang, getLangName, makeGetStaticPaths };
6
- export default function astroI18nya<T extends string | number | symbol>(i18nya: I18Nya<T>): AstroIntegration;
6
+ export type AstroI18nyaConfig = {
7
+ prefixDefaultLocale?: boolean;
8
+ redirectToDefaultLocale?: boolean;
9
+ };
10
+ /**
11
+ * Astro integration for i18nya.
12
+ * @param i18nya return value of `init()` from `i18nya`
13
+ * @param config routing behavior overrides
14
+ */
15
+ export default function astro_i18nya<T extends string | number | symbol>(i18nya: I18Nya<T>, { prefixDefaultLocale, redirectToDefaultLocale }?: AstroI18nyaConfig): AstroIntegration;
7
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAC;AAC9C,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACtE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC;AAE5D,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,EACpE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAChB,gBAAgB,CAqBlB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAC;AAC9C,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACtE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC;AAE5D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,EACrE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EACjB,EAAE,mBAA2B,EAAE,uBAA+B,EAAE,GAAE,iBAAsB,GACvF,gBAAgB,CAqBlB"}
package/dist/index.js CHANGED
@@ -1,7 +1,12 @@
1
1
  import Trans from "./Trans.js";
2
2
  import { listLang, getLangName, makeGetStaticPaths } from "./util.js";
3
3
  export { Trans, listLang, getLangName, makeGetStaticPaths };
4
- export default function astroI18nya(i18nya) {
4
+ /**
5
+ * Astro integration for i18nya.
6
+ * @param i18nya return value of `init()` from `i18nya`
7
+ * @param config routing behavior overrides
8
+ */
9
+ export default function astro_i18nya(i18nya, { prefixDefaultLocale = false, redirectToDefaultLocale = false } = {}) {
5
10
  return {
6
11
  name: "astro-i18nya",
7
12
  hooks: {
@@ -11,8 +16,8 @@ export default function astroI18nya(i18nya) {
11
16
  defaultLocale: i18nya.config.defaultLang,
12
17
  locales: Object.keys(i18nya.translations),
13
18
  routing: {
14
- prefixDefaultLocale: false,
15
- redirectToDefaultLocale: true,
19
+ prefixDefaultLocale,
20
+ redirectToDefaultLocale,
16
21
  fallbackType: "redirect",
17
22
  },
18
23
  },
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACtE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC;AAE5D,MAAM,CAAC,OAAO,UAAU,WAAW,CACjC,MAAiB;IAEjB,OAAO;QACL,IAAI,EAAE,cAAc;QACpB,KAAK,EAAE;YACL,oBAAoB,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE;gBACzC,YAAY,CAAC;oBACX,IAAI,EAAE;wBACJ,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW;wBACxC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;wBACzC,OAAO,EAAE;4BACP,mBAAmB,EAAE,KAAK;4BAC1B,uBAAuB,EAAE,IAAI;4BAC7B,YAAY,EAAE,UAAU;yBACzB;qBACF;oBACD,uBAAuB;oBACvB,8DAA8D;iBAC/D,CAAC,CAAC;YACL,CAAC;SACF;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACtE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC;AAO5D;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,YAAY,CAClC,MAAiB,EACjB,EAAE,mBAAmB,GAAG,KAAK,EAAE,uBAAuB,GAAG,KAAK,KAAwB,EAAE;IAExF,OAAO;QACL,IAAI,EAAE,cAAc;QACpB,KAAK,EAAE;YACL,oBAAoB,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE;gBACzC,YAAY,CAAC;oBACX,IAAI,EAAE;wBACJ,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW;wBACxC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;wBACzC,OAAO,EAAE;4BACP,mBAAmB;4BACnB,uBAAuB;4BACvB,YAAY,EAAE,UAAU;yBACzB;qBACF;oBACD,uBAAuB;oBACvB,8DAA8D;iBAC/D,CAAC,CAAC;YACL,CAAC;SACF;KACF,CAAC;AACJ,CAAC"}
package/dist/util.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import type { GetStaticPathsResult } from "astro";
1
2
  import type { I18Nya } from "i18nya";
2
3
  /**
3
4
  * Obtain the language name.
@@ -13,9 +14,20 @@ export declare const getLangName: (lang: string, displayLang?: string) => string
13
14
  * @returns a map of language locale → language name
14
15
  */
15
16
  export declare const listLang: <T extends string | number | symbol>(i18nya: I18Nya<T>, displayLang?: string) => Map<string, string>;
16
- export declare const makeGetStaticPaths: <T extends string | number | symbol>(i18nya: I18Nya<T>) => () => Promise<{
17
- params: {
18
- lang: string;
19
- };
20
- }[]>;
17
+ /**
18
+ * Build a `getStaticPaths` factory for Astro i18n routes.
19
+ *
20
+ * Returns a function that expands the provided `staticPaths` for every
21
+ * language in `i18nya.translations`. By default, the default language uses
22
+ * `{ params: { lang: undefined } }` so its route is not prefixed, while
23
+ * other languages use `{ params: { lang } }`. When `prefixDefaultLocale`
24
+ * is true, the default language also uses `{ params: { lang } }`.
25
+ *
26
+ * @param i18nya return value of `init()` from `i18nya`
27
+ * @param staticPaths original `getStaticPaths` array to be localized
28
+ * @returns a `getStaticPaths` function for Astro
29
+ */
30
+ export declare const makeGetStaticPaths: <T extends string | number | symbol>(i18nya: I18Nya<T>, staticPaths?: GetStaticPathsResult, { prefixDefaultLocale }?: {
31
+ prefixDefaultLocale?: boolean;
32
+ }) => (() => GetStaticPathsResult);
21
33
  //# sourceMappingURL=util.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAErC;;;;;GAKG;AACH,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,EAAE,cAAc,MAAM,WAIjD,CAAC;AAEd;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,GAAI,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,EACzD,QAAQ,MAAM,CAAC,CAAC,CAAC,EACjB,cAAc,MAAM,wBAOnB,CAAC;AAEJ,eAAO,MAAM,kBAAkB,GAC5B,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,QAAQ,MAAM,CAAC,CAAC,CAAC;;;;IAMnD,CAAC"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAsB,oBAAoB,EAAE,MAAM,OAAO,CAAC;AACtE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAErC;;;;;GAKG;AACH,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,EAAE,cAAc,MAAM,WAIjD,CAAC;AAEd;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,GAAI,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,EACzD,QAAQ,MAAM,CAAC,CAAC,CAAC,EACjB,cAAc,MAAM,wBAOnB,CAAC;AAEJ;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,kBAAkB,GAC5B,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,EACjC,QAAQ,MAAM,CAAC,CAAC,CAAC,EACjB,cAAa,oBAAuC,EACpD,0BAAiC;IAAE,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAAO,KACtE,CAAC,MAAM,oBAAoB,CAczB,CAAC"}
package/dist/util.js CHANGED
@@ -18,7 +18,27 @@ export const listLang = (i18nya, displayLang) => new Map(Object.keys(i18nya.tran
18
18
  l,
19
19
  getLangName(l.replace("_", "-"), displayLang),
20
20
  ]));
21
- export const makeGetStaticPaths = (i18nya) => async () => Object.keys(i18nya.translations).map((lang) => lang === i18nya.config.defaultLang
22
- ? { params: { lang: undefined } }
23
- : { params: { lang: lang } });
21
+ /**
22
+ * Build a `getStaticPaths` factory for Astro i18n routes.
23
+ *
24
+ * Returns a function that expands the provided `staticPaths` for every
25
+ * language in `i18nya.translations`. By default, the default language uses
26
+ * `{ params: { lang: undefined } }` so its route is not prefixed, while
27
+ * other languages use `{ params: { lang } }`. When `prefixDefaultLocale`
28
+ * is true, the default language also uses `{ params: { lang } }`.
29
+ *
30
+ * @param i18nya return value of `init()` from `i18nya`
31
+ * @param staticPaths original `getStaticPaths` array to be localized
32
+ * @returns a `getStaticPaths` function for Astro
33
+ */
34
+ export const makeGetStaticPaths = (i18nya, staticPaths = [{ params: {} }], { prefixDefaultLocale = false } = {}) => () => staticPaths.flatMap(({ params, props }) => Object.keys(i18nya.translations)
35
+ .map((lang) => ({
36
+ props,
37
+ params: {
38
+ ...params,
39
+ lang: lang === i18nya.config.defaultLang && !prefixDefaultLocale
40
+ ? undefined
41
+ : lang,
42
+ },
43
+ })));
24
44
  //# sourceMappingURL=util.js.map
package/dist/util.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,WAAoB,EAAE,EAAE,CAChE,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,WAAW,IAAI,IAAI,CAAC,EAAE;IAC3C,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,QAAQ;CAChB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;AAEd;;;;;GAKG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CACtB,MAAiB,EACjB,WAAoB,EACpB,EAAE,CACF,IAAI,GAAG,CACL,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAC1C,CAAC;IACD,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,WAAW,CAAC;CAC9C,CAAC,CACH,CAAC;AAEJ,MAAM,CAAC,MAAM,kBAAkB,GAC7B,CAAqC,MAAiB,EAAE,EAAE,CAC1D,KAAK,IAAI,EAAE,CACT,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAC5C,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,WAAW;IAChC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;IACjC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAC/B,CAAC"}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,WAAoB,EAAE,EAAE,CAChE,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,WAAW,IAAI,IAAI,CAAC,EAAE;IAC3C,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,QAAQ;CAChB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;AAEd;;;;;GAKG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CACtB,MAAiB,EACjB,WAAoB,EACpB,EAAE,CACF,IAAI,GAAG,CACL,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAC1C,CAAC;IACD,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,WAAW,CAAC;CAC9C,CAAC,CACH,CAAC;AAEJ;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAC7B,CACE,MAAiB,EACjB,cAAoC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,EACpD,EAAE,mBAAmB,GAAG,KAAK,KAAwC,EAAE,EACzC,EAAE,CAChC,GAAyB,EAAE,CACzB,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAwB,EAAE,CAC9D,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;KAC7B,GAAG,CAAC,CAAC,IAAI,EAAsB,EAAE,CAAC,CAAC;IAClC,KAAK;IACL,MAAM,EAAE;QACN,GAAG,MAAM;QACT,IAAI,EACF,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,WAAW,IAAI,CAAC,mBAAmB;YACxD,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,IAAI;KACX;CACF,CAAC,CAAC,CACN,CAAC"}
package/jest.config.ts CHANGED
@@ -1,7 +1,14 @@
1
- import type {Config} from 'jest';
1
+ import type { Config } from 'jest';
2
2
 
3
3
  const config: Config = {
4
- "testEnvironment": "jsdom"
4
+ preset: "ts-jest",
5
+ testEnvironment: "jsdom",
6
+ testPathIgnorePatterns: [
7
+ "<rootDir>/dist"
8
+ ],
9
+ transform: {
10
+ '^.+\\.(ts|tsx)$': 'ts-jest',
11
+ },
5
12
  };
6
13
 
7
- export default config;
14
+ export default config;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "astro-i18nya",
3
- "version": "0.2.3",
3
+ "version": "0.2.5",
4
4
  "description": "Astro integration for i18nya: i18n as small as a cat's paw",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -13,11 +13,6 @@
13
13
  "type": "git",
14
14
  "url": "git+https://github.com/FyraLabs/i18nya.git"
15
15
  },
16
- "jest": {
17
- "testPathIgnorePatterns": [
18
- "<rootDir>/dist"
19
- ]
20
- },
21
16
  "keywords": [
22
17
  "astro",
23
18
  "astro-integration",
@@ -35,25 +30,22 @@
35
30
  },
36
31
  "homepage": "https://github.com/FyraLabs/i18nya#readme",
37
32
  "devDependencies": {
38
- "@babel/core": "^7.28.5",
39
- "@babel/preset-env": "^7.28.5",
40
- "@babel/preset-react": "^7.28.5",
41
- "@babel/preset-typescript": "^7.28.5",
42
33
  "@testing-library/jest-dom": "^6.9.1",
43
34
  "@testing-library/react": "^16.3.0",
44
35
  "@types/jest": "^30.0.0",
45
36
  "@types/node": "^24.10.1",
46
- "babel-jest": "^30.2.0",
37
+ "@types/react": "^19.2.14",
47
38
  "jest": "^30.2.0",
48
39
  "jest-environment-jsdom": "^30.2.0",
49
40
  "react-test-renderer": "^19.2.0",
41
+ "ts-jest": "^29.4.9",
50
42
  "typescript": "^5.9.3"
51
43
  },
52
44
  "peerDependencies": {
53
45
  "typescript": "^5"
54
46
  },
55
47
  "dependencies": {
56
- "astro": "^5.16.0",
48
+ "astro": "^6.2.2",
57
49
  "i18nya": "^0.2.0",
58
50
  "react": "^19.2.0"
59
51
  }
package/src/Trans.tsx CHANGED
@@ -44,9 +44,12 @@ export default (({ children, t }: Props) => {
44
44
 
45
45
  const elms: ReactNode[] = []; // resulting list of elements
46
46
  const tagStack = [];
47
- for (let ch_idx = 0; ch_idx < t.length; ) {
47
+ for (let ch_idx = 0; ch_idx < t.length;) {
48
48
  if (t.substring(ch_idx, ch_idx + 2) == "\\<") {
49
- elms.push("<");
49
+ if (typeof elms[elms.length - 1] === "string")
50
+ elms[elms.length - 1] += "<";
51
+ else
52
+ elms.push("<");
50
53
  ch_idx += 2;
51
54
  continue;
52
55
  }
package/src/index.ts CHANGED
@@ -4,8 +4,19 @@ import Trans from "./Trans.js";
4
4
  import { listLang, getLangName, makeGetStaticPaths } from "./util.js";
5
5
  export { Trans, listLang, getLangName, makeGetStaticPaths };
6
6
 
7
- export default function astroI18nya<T extends string | number | symbol>(
7
+ export type AstroI18nyaConfig = {
8
+ prefixDefaultLocale?: boolean;
9
+ redirectToDefaultLocale?: boolean;
10
+ };
11
+
12
+ /**
13
+ * Astro integration for i18nya.
14
+ * @param i18nya return value of `init()` from `i18nya`
15
+ * @param config routing behavior overrides
16
+ */
17
+ export default function astro_i18nya<T extends string | number | symbol>(
8
18
  i18nya: I18Nya<T>,
19
+ { prefixDefaultLocale = false, redirectToDefaultLocale = false }: AstroI18nyaConfig = {},
9
20
  ): AstroIntegration {
10
21
  return {
11
22
  name: "astro-i18nya",
@@ -16,8 +27,8 @@ export default function astroI18nya<T extends string | number | symbol>(
16
27
  defaultLocale: i18nya.config.defaultLang,
17
28
  locales: Object.keys(i18nya.translations),
18
29
  routing: {
19
- prefixDefaultLocale: false,
20
- redirectToDefaultLocale: true,
30
+ prefixDefaultLocale,
31
+ redirectToDefaultLocale,
21
32
  fallbackType: "redirect",
22
33
  },
23
34
  },
@@ -0,0 +1,61 @@
1
+ import type { GetStaticPathsResult } from "astro";
2
+ import type { I18Nya } from "i18nya";
3
+ import { makeGetStaticPaths } from "./util";
4
+
5
+ const makeI18nya = (defaultLang: string, langs: string[]): I18Nya<string> =>
6
+ ({
7
+ config: { defaultLang },
8
+ translations: Object.fromEntries(langs.map((lang) => [lang, {}])),
9
+ }) as I18Nya<string>;
10
+
11
+ describe("makeGetStaticPaths", () => {
12
+ it("expands static paths for each language", () => {
13
+ const i18nya = makeI18nya("en", ["en", "fr"]);
14
+ const staticPaths: GetStaticPathsResult = [
15
+ { params: { slug: "hello" }, props: { id: 1 } },
16
+ { params: { slug: "about" }, props: { id: 2 } },
17
+ ];
18
+
19
+ const getStaticPaths = makeGetStaticPaths(i18nya, staticPaths);
20
+ const result = getStaticPaths();
21
+
22
+ expect(result).toEqual([
23
+ { params: { slug: "hello", lang: undefined }, props: { id: 1 } },
24
+ { params: { slug: "hello", lang: "fr" }, props: { id: 1 } },
25
+ { params: { slug: "about", lang: undefined }, props: { id: 2 } },
26
+ { params: { slug: "about", lang: "fr" }, props: { id: 2 } },
27
+ ]);
28
+ });
29
+
30
+ it("uses undefined for default language", () => {
31
+ const i18nya = makeI18nya("en", ["en", "ja"]);
32
+ const staticPaths: GetStaticPathsResult = [{ params: { slug: "home" } }];
33
+
34
+ const result = makeGetStaticPaths(i18nya, staticPaths)();
35
+
36
+ expect(result[0].params.lang).toBeUndefined();
37
+ expect(result[0].params.slug).toBe("home");
38
+ expect(result[1].params.lang).toBe("ja");
39
+ expect(result[1].params.slug).toBe("home");
40
+ });
41
+
42
+ it("includes default language when prefixDefaultLocale is true", () => {
43
+ const i18nya = makeI18nya("en", ["en", "ja"]);
44
+ const staticPaths: GetStaticPathsResult = [{ params: { slug: "home" } }];
45
+
46
+ const result = makeGetStaticPaths(i18nya, staticPaths, { prefixDefaultLocale: true })();
47
+
48
+ expect(result[0].params.lang).toBe("en");
49
+ expect(result[0].params.slug).toBe("home");
50
+ expect(result[1].params.lang).toBe("ja");
51
+ expect(result[1].params.slug).toBe("home");
52
+ });
53
+
54
+ it("returns static paths even when no static paths are provided", () => {
55
+ const i18nya = makeI18nya("en", ["en", "fr"]);
56
+ const result = makeGetStaticPaths(i18nya)();
57
+
58
+ expect(result[0].params.lang).toBe(undefined);
59
+ expect(result[1].params.lang).toBe("fr");
60
+ });
61
+ });
package/src/util.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import type { GetStaticPathsItem, GetStaticPathsResult } from "astro";
1
2
  import type { I18Nya } from "i18nya";
2
3
 
3
4
  /**
@@ -29,11 +30,36 @@ export const listLang = <T extends string | number | symbol>(
29
30
  ]),
30
31
  );
31
32
 
33
+ /**
34
+ * Build a `getStaticPaths` factory for Astro i18n routes.
35
+ *
36
+ * Returns a function that expands the provided `staticPaths` for every
37
+ * language in `i18nya.translations`. By default, the default language uses
38
+ * `{ params: { lang: undefined } }` so its route is not prefixed, while
39
+ * other languages use `{ params: { lang } }`. When `prefixDefaultLocale`
40
+ * is true, the default language also uses `{ params: { lang } }`.
41
+ *
42
+ * @param i18nya return value of `init()` from `i18nya`
43
+ * @param staticPaths original `getStaticPaths` array to be localized
44
+ * @returns a `getStaticPaths` function for Astro
45
+ */
32
46
  export const makeGetStaticPaths =
33
- <T extends string | number | symbol>(i18nya: I18Nya<T>) =>
34
- async () =>
35
- Object.keys(i18nya.translations).map((lang) =>
36
- lang === i18nya.config.defaultLang
37
- ? { params: { lang: undefined } }
38
- : { params: { lang: lang } },
39
- );
47
+ <T extends string | number | symbol>(
48
+ i18nya: I18Nya<T>,
49
+ staticPaths: GetStaticPathsResult = [{ params: {} }],
50
+ { prefixDefaultLocale = false }: { prefixDefaultLocale?: boolean } = {},
51
+ ): (() => GetStaticPathsResult) =>
52
+ (): GetStaticPathsResult =>
53
+ staticPaths.flatMap(({ params, props }): GetStaticPathsResult =>
54
+ Object.keys(i18nya.translations)
55
+ .map((lang): GetStaticPathsItem => ({
56
+ props,
57
+ params: {
58
+ ...params,
59
+ lang:
60
+ lang === i18nya.config.defaultLang && !prefixDefaultLocale
61
+ ? undefined
62
+ : lang,
63
+ },
64
+ })),
65
+ );
package/babel.config.js DELETED
@@ -1,8 +0,0 @@
1
- module.exports = {
2
- presets: [
3
- ['@babel/preset-env', {targets: {node: 'current'}}],
4
- '@babel/preset-typescript',
5
-
6
- ['@babel/preset-react', {runtime: 'automatic'}],
7
- ],
8
- };