ai-i18n-tools 1.4.4 → 1.5.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.
Files changed (187) hide show
  1. package/README.md +122 -118
  2. package/dist/build-info.generated.d.ts +1 -1
  3. package/dist/build-info.generated.js +1 -1
  4. package/dist/cli/check-markdown.js +3 -3
  5. package/dist/cli/check-markdown.js.map +1 -1
  6. package/dist/cli/doc-translate.d.ts +54 -8
  7. package/dist/cli/doc-translate.d.ts.map +1 -1
  8. package/dist/cli/doc-translate.js +378 -41
  9. package/dist/cli/doc-translate.js.map +1 -1
  10. package/dist/cli/extract-strings.d.ts.map +1 -1
  11. package/dist/cli/extract-strings.js +12 -10
  12. package/dist/cli/extract-strings.js.map +1 -1
  13. package/dist/cli/index.js +231 -88
  14. package/dist/cli/index.js.map +1 -1
  15. package/dist/cli/lint-source.js +3 -3
  16. package/dist/cli/lint-source.js.map +1 -1
  17. package/dist/cli/translate-json-run.d.ts +11 -0
  18. package/dist/cli/translate-json-run.d.ts.map +1 -0
  19. package/dist/cli/translate-json-run.js +164 -0
  20. package/dist/cli/translate-json-run.js.map +1 -0
  21. package/dist/cli/translate-ui-strings.d.ts.map +1 -1
  22. package/dist/cli/translate-ui-strings.js +2 -6
  23. package/dist/cli/translate-ui-strings.js.map +1 -1
  24. package/dist/cli/write-heading-ids.d.ts +1 -1
  25. package/dist/cli/write-heading-ids.d.ts.map +1 -1
  26. package/dist/cli/write-heading-ids.js +2 -2
  27. package/dist/cli/write-heading-ids.js.map +1 -1
  28. package/dist/core/config-migrate.d.ts +22 -0
  29. package/dist/core/config-migrate.d.ts.map +1 -0
  30. package/dist/core/config-migrate.js +168 -0
  31. package/dist/core/config-migrate.js.map +1 -0
  32. package/dist/core/config.d.ts +8 -4
  33. package/dist/core/config.d.ts.map +1 -1
  34. package/dist/core/config.js +181 -45
  35. package/dist/core/config.js.map +1 -1
  36. package/dist/core/doc-file-tracking.d.ts +1 -4
  37. package/dist/core/doc-file-tracking.d.ts.map +1 -1
  38. package/dist/core/doc-file-tracking.js +14 -7
  39. package/dist/core/doc-file-tracking.js.map +1 -1
  40. package/dist/core/docs-output-normalize.d.ts +14 -0
  41. package/dist/core/docs-output-normalize.d.ts.map +1 -0
  42. package/dist/core/docs-output-normalize.js +57 -0
  43. package/dist/core/docs-output-normalize.js.map +1 -0
  44. package/dist/core/locale-utils.d.ts +6 -0
  45. package/dist/core/locale-utils.d.ts.map +1 -1
  46. package/dist/core/locale-utils.js +8 -0
  47. package/dist/core/locale-utils.js.map +1 -1
  48. package/dist/core/markdown-emphasis-defaults.d.ts +6 -6
  49. package/dist/core/markdown-emphasis-defaults.d.ts.map +1 -1
  50. package/dist/core/markdown-emphasis-defaults.js +12 -12
  51. package/dist/core/markdown-emphasis-defaults.js.map +1 -1
  52. package/dist/core/output-paths.d.ts +2 -2
  53. package/dist/core/output-paths.d.ts.map +1 -1
  54. package/dist/core/output-paths.js +43 -19
  55. package/dist/core/output-paths.js.map +1 -1
  56. package/dist/core/project-stats.d.ts.map +1 -1
  57. package/dist/core/project-stats.js +2 -2
  58. package/dist/core/project-stats.js.map +1 -1
  59. package/dist/core/resolve-content-paths.d.ts +12 -0
  60. package/dist/core/resolve-content-paths.d.ts.map +1 -0
  61. package/dist/core/resolve-content-paths.js +122 -0
  62. package/dist/core/resolve-content-paths.js.map +1 -0
  63. package/dist/core/svg-asset-paths.d.ts +2 -2
  64. package/dist/core/svg-asset-paths.d.ts.map +1 -1
  65. package/dist/core/svg-asset-paths.js +10 -6
  66. package/dist/core/svg-asset-paths.js.map +1 -1
  67. package/dist/core/types.d.ts +248 -31
  68. package/dist/core/types.d.ts.map +1 -1
  69. package/dist/core/types.js +119 -28
  70. package/dist/core/types.js.map +1 -1
  71. package/dist/core/ui-extractor-config.d.ts +6 -0
  72. package/dist/core/ui-extractor-config.d.ts.map +1 -0
  73. package/dist/core/ui-extractor-config.js +7 -0
  74. package/dist/core/ui-extractor-config.js.map +1 -0
  75. package/dist/core/ui-languages.d.ts +6 -1
  76. package/dist/core/ui-languages.d.ts.map +1 -1
  77. package/dist/core/ui-languages.js +58 -4
  78. package/dist/core/ui-languages.js.map +1 -1
  79. package/dist/core/user-edited-model.d.ts +1 -1
  80. package/dist/core/user-edited-model.d.ts.map +1 -1
  81. package/dist/core/user-edited-model.js +1 -1
  82. package/dist/core/user-edited-model.js.map +1 -1
  83. package/dist/{edit-cache-app → dashboard-app}/app.js +22 -15
  84. package/dist/{edit-cache-app → dashboard-app}/index.html +15 -13
  85. package/dist/{edit-cache-app → dashboard-app}/styles.css +11 -11
  86. package/dist/extractors/astro-template-extractor.d.ts +39 -0
  87. package/dist/extractors/astro-template-extractor.d.ts.map +1 -0
  88. package/dist/extractors/astro-template-extractor.js +622 -0
  89. package/dist/extractors/astro-template-extractor.js.map +1 -0
  90. package/dist/extractors/frontmatter-fields.d.ts +25 -0
  91. package/dist/extractors/frontmatter-fields.d.ts.map +1 -0
  92. package/dist/extractors/frontmatter-fields.js +160 -0
  93. package/dist/extractors/frontmatter-fields.js.map +1 -0
  94. package/dist/extractors/markdown-extractor.d.ts +2 -0
  95. package/dist/extractors/markdown-extractor.d.ts.map +1 -1
  96. package/dist/extractors/markdown-extractor.js +61 -10
  97. package/dist/extractors/markdown-extractor.js.map +1 -1
  98. package/dist/extractors/nested-json-extractor.d.ts +15 -0
  99. package/dist/extractors/nested-json-extractor.d.ts.map +1 -0
  100. package/dist/extractors/nested-json-extractor.js +132 -0
  101. package/dist/extractors/nested-json-extractor.js.map +1 -0
  102. package/dist/extractors/ui-string-babel.d.ts +15 -0
  103. package/dist/extractors/ui-string-babel.d.ts.map +1 -1
  104. package/dist/extractors/ui-string-babel.js +135 -0
  105. package/dist/extractors/ui-string-babel.js.map +1 -1
  106. package/dist/extractors/ui-string-extractor.js +2 -2
  107. package/dist/extractors/ui-string-extractor.js.map +1 -1
  108. package/dist/extractors/ui-string-locations.js +2 -2
  109. package/dist/extractors/ui-string-locations.js.map +1 -1
  110. package/dist/glossary/glossary.d.ts.map +1 -1
  111. package/dist/glossary/glossary.js +3 -11
  112. package/dist/glossary/glossary.js.map +1 -1
  113. package/dist/glossary/parse-glossary-csv.d.ts +5 -0
  114. package/dist/glossary/parse-glossary-csv.d.ts.map +1 -0
  115. package/dist/glossary/parse-glossary-csv.js +21 -0
  116. package/dist/glossary/parse-glossary-csv.js.map +1 -0
  117. package/dist/index.d.ts +2 -2
  118. package/dist/index.d.ts.map +1 -1
  119. package/dist/index.js +1 -1
  120. package/dist/index.js.map +1 -1
  121. package/dist/markdown/write-heading-ids-core.d.ts +3 -2
  122. package/dist/markdown/write-heading-ids-core.d.ts.map +1 -1
  123. package/dist/markdown/write-heading-ids-core.js +26 -12
  124. package/dist/markdown/write-heading-ids-core.js.map +1 -1
  125. package/dist/processors/doc-postprocess.d.ts.map +1 -1
  126. package/dist/processors/doc-postprocess.js +6 -6
  127. package/dist/processors/doc-postprocess.js.map +1 -1
  128. package/dist/processors/expression-attribute-protection.d.ts +24 -0
  129. package/dist/processors/expression-attribute-protection.d.ts.map +1 -0
  130. package/dist/processors/expression-attribute-protection.js +76 -0
  131. package/dist/processors/expression-attribute-protection.js.map +1 -0
  132. package/dist/processors/flat-link-rewrite.d.ts +16 -0
  133. package/dist/processors/flat-link-rewrite.d.ts.map +1 -1
  134. package/dist/processors/flat-link-rewrite.js +23 -0
  135. package/dist/processors/flat-link-rewrite.js.map +1 -1
  136. package/dist/processors/mdx-placeholders.d.ts +2 -7
  137. package/dist/processors/mdx-placeholders.d.ts.map +1 -1
  138. package/dist/processors/mdx-placeholders.js +15 -14
  139. package/dist/processors/mdx-placeholders.js.map +1 -1
  140. package/dist/processors/placeholder-handler.d.ts +2 -0
  141. package/dist/processors/placeholder-handler.d.ts.map +1 -1
  142. package/dist/processors/placeholder-handler.js +1 -1
  143. package/dist/processors/placeholder-handler.js.map +1 -1
  144. package/dist/processors/validator.d.ts +8 -0
  145. package/dist/processors/validator.d.ts.map +1 -1
  146. package/dist/processors/validator.js +69 -15
  147. package/dist/processors/validator.js.map +1 -1
  148. package/dist/server/{translation-editor.d.ts → translation-dashboard.d.ts} +8 -8
  149. package/dist/server/translation-dashboard.d.ts.map +1 -0
  150. package/dist/server/{translation-editor.js → translation-dashboard.js} +15 -15
  151. package/dist/server/translation-dashboard.js.map +1 -0
  152. package/docs/GETTING_STARTED.md +689 -253
  153. package/docs/LOCALE-ASSETS-GUIDE.md +671 -0
  154. package/docs/PACKAGE_OVERVIEW.md +59 -25
  155. package/docs/ai-i18n-tools-context.md +143 -18
  156. package/docs/translation-dashboard.png +0 -0
  157. package/package.json +17 -31
  158. package/dist/server/translation-editor.d.ts.map +0 -1
  159. package/dist/server/translation-editor.js.map +0 -1
  160. package/docs/translation-cache-editor.png +0 -0
  161. package/translated-docs/README.de.md +0 -261
  162. package/translated-docs/README.es.md +0 -261
  163. package/translated-docs/README.fr.md +0 -261
  164. package/translated-docs/README.hi.md +0 -261
  165. package/translated-docs/README.ja.md +0 -261
  166. package/translated-docs/README.ko.md +0 -261
  167. package/translated-docs/README.pt-BR.md +0 -261
  168. package/translated-docs/README.zh-CN.md +0 -261
  169. package/translated-docs/README.zh-TW.md +0 -261
  170. package/translated-docs/docs/GETTING_STARTED.de.md +0 -1269
  171. package/translated-docs/docs/GETTING_STARTED.es.md +0 -1269
  172. package/translated-docs/docs/GETTING_STARTED.fr.md +0 -1269
  173. package/translated-docs/docs/GETTING_STARTED.hi.md +0 -1269
  174. package/translated-docs/docs/GETTING_STARTED.ja.md +0 -1269
  175. package/translated-docs/docs/GETTING_STARTED.ko.md +0 -1269
  176. package/translated-docs/docs/GETTING_STARTED.pt-BR.md +0 -1269
  177. package/translated-docs/docs/GETTING_STARTED.zh-CN.md +0 -1269
  178. package/translated-docs/docs/GETTING_STARTED.zh-TW.md +0 -1269
  179. package/translated-docs/docs/PACKAGE_OVERVIEW.de.md +0 -495
  180. package/translated-docs/docs/PACKAGE_OVERVIEW.es.md +0 -495
  181. package/translated-docs/docs/PACKAGE_OVERVIEW.fr.md +0 -495
  182. package/translated-docs/docs/PACKAGE_OVERVIEW.hi.md +0 -495
  183. package/translated-docs/docs/PACKAGE_OVERVIEW.ja.md +0 -495
  184. package/translated-docs/docs/PACKAGE_OVERVIEW.ko.md +0 -495
  185. package/translated-docs/docs/PACKAGE_OVERVIEW.pt-BR.md +0 -495
  186. package/translated-docs/docs/PACKAGE_OVERVIEW.zh-CN.md +0 -495
  187. package/translated-docs/docs/PACKAGE_OVERVIEW.zh-TW.md +0 -495
package/README.md CHANGED
@@ -7,24 +7,38 @@
7
7
  [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](./LICENSE)
8
8
  [![CI](https://github.com/wsj-br/ai-i18n-tools/actions/workflows/ci.yml/badge.svg)](https://github.com/wsj-br/ai-i18n-tools/actions/workflows/ci.yml)
9
9
 
10
- CLI and toolkit for internationalizing JavaScript/TypeScript applications and documentation sites. Extracts UI strings, translates them using large language models via OpenRouter, and generates locale-ready JSON files for i18next. For documentation, it translates markdown and MDX under `contentPaths` (the localized pages readers open). Optional Docusaurus label JSON from `jsonSource` covers site shell strings (`write-translations` catalogs such as theme/nav/footer), distinct from page body copy. SVG file translation uses `features.translateSVG` and the top-level `svg` block.
10
+ A CLI and toolkit for internationalizing JavaScript/TypeScript applications and documentation sites using large language models via [OpenRouter](https://openrouter.ai/). Three modular workflows, all sharing a single config file, support different translation needs:
11
11
 
12
+ - **Workflow 1 — UI Translation:** Extracts `t("…")` calls from JS/TS (and optionally from `.astro` files) and generates flat, per-locale JSON for i18next or static SSG lookup.
13
+ - **Workflow 2 — Document Translation:** Translates markdown, MDX, and `.astro` pages (for websites and Starlight) listed in `docs[].contentPaths` using `translate-docs`.
14
+ - **Workflow 3 — JSON File Translation:** Translates arbitrary nested JSON bundles defined in `json[]`. Use `translate-json` when UI copy is stored in per-locale JSON files instead of using `t()` in source.
15
+
16
+ **SVG** assets are translated using `features.translateSVG`, the top-level `svg` block, and `translate-svg`—not `docs[].contentPaths`.
17
+
18
+ **Which workflow should I use?**
19
+ - Source uses `t()` → **Workflow 1** (`extract` / `translate-ui`)
20
+ - Localized pages or Docusaurus catalog JSON → **Workflow 2** (`translate-docs`)
21
+ - Only standalone, nested JSON locale files → **Workflow 3** (`translate-json`)
22
+
23
+ All workflows maintain a file/SQLite cache to ensure that only new or changed segments (strings or text chunks) are sent to the LLM.
12
24
 
13
25
  <small>**Read in other languages:** </small>
14
26
  <small id="lang-list">[English (GB)](./README.md) · [Deutsch](./translated-docs/README.de.md) · [Español](./translated-docs/README.es.md) · [Français](./translated-docs/README.fr.md) · [हिन्दी](./translated-docs/README.hi.md) · [日本語](./translated-docs/README.ja.md) · [한국어](./translated-docs/README.ko.md) · [Português (Brasil)](./translated-docs/README.pt-BR.md) · [中文 (中国大陆)](./translated-docs/README.zh-CN.md) · [中文 (台灣)](./translated-docs/README.zh-TW.md)</small>
15
27
 
28
+
16
29
  <!-- START doctoc generated TOC please keep comment here to allow auto update -->
17
30
  <!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
18
31
  **Table of Contents**
19
32
 
20
- - [Two core workflows](#two-core-workflows)
33
+ - [Core workflows](#core-workflows)
21
34
  - [Installation](#installation)
22
35
  - [Using the CLI](#using-the-cli)
23
36
  - [OpenRouter](#openrouter)
24
37
  - [Quick start](#quick-start)
25
- - [Workflow 1 - UI strings](#workflow-1---ui-strings)
26
- - [Workflow 2 - Documentation](#workflow-2---documentation)
27
- - [Both workflows](#both-workflows)
38
+ - [Workflow 1 - UI Translation](#workflow-1---ui-translation)
39
+ - [Workflow 2 - Document Translation](#workflow-2---document-translation)
40
+ - [Astro (plain Astro & Starlight)](#astro-plain-astro--starlight)
41
+ - [Combined workflow](#combined-workflow)
28
42
  - [Runtime helpers](#runtime-helpers)
29
43
  - [CLI commands](#cli-commands)
30
44
  - [Documentation](#documentation)
@@ -36,25 +50,29 @@ CLI and toolkit for internationalizing JavaScript/TypeScript applications and do
36
50
 
37
51
 
38
52
 
39
- <a id="two-core-workflows"></a>
40
- ## Two core workflows
53
+ <a id="core-workflows"></a>
54
+ ## Core workflows
41
55
 
42
- **Workflow 1 - UI Translation** (React, Next.js, Node.js, any i18next project)
56
+ **Workflow 1 - UI Translation** — for any JS/TS project using i18next (React, Next.js, Node.js, CLIs) or static Astro SSG
43
57
 
44
- Builds a master catalog (`strings.json` with optional per-locale `models` metadata) from `t("…")` / `i18n.t("…")` **literals**, optionally `package.json` `description`, and optionally each `englishName` from `ui-languages.json` when enabled in config. Translates missing entries per locale via OpenRouter and writes flat JSON files (`de.json`, `pt-BR.json`, …) ready for i18next.
58
+ Scans source files for `t("…")` / `i18n.t("…")` literals (add `.astro` to `ui.uiExtractor.extensions` for Astro frontmatter and template expressions), builds a master catalog (`strings.json`), translates missing entries per locale via OpenRouter, and writes flat JSON files (`de.json`, `pt-BR.json`, …). English source text is the runtime lookup key in those bundles — `strings.json` is the extraction cache, not the runtime bundle.
45
59
 
46
- **Workflow 2 - Document translation** (Markdown / MDX, optional Docusaurus shell JSON)
60
+ **Workflow 2 - Document Translation** — for markdown, MDX, and `.astro` under `docs[].contentPaths`
47
61
 
48
- Translates `.md` and `.mdx` from each `documentations` block’s `contentPaths` — that is the localized documentation. When `features.translateJSON` and `jsonSource` are set, it also translates Docusaurus **label JSON** (navbar, footer, theme/plugin UI from `write-translations`), not MDX body text. Supports Docusaurus-style and flat locale-suffixed layouts per block (`documentations[].markdownOutput`). Shared root `cacheDir` holds the SQLite cache so only new or changed segments are sent to the LLM. **SVG:** enable `features.translateSVG`, add the top-level `svg` block, then use `translate-svg` (also run from `sync` when both are set).
62
+ Designed primarily for **markdown, MDX, and `.astro` documentation** (Docusaurus, [Astro Starlight](https://starlight.astro.build/), plain README files, and plain Astro marketing pages). `translate-docs` writes localised copies with a shared SQLite cache. On Docusaurus sites, set `docs[].docusaurusCatalogDir` to the `write-translations` catalog folder so shell JSON (navbar, footer, theme strings) is translated in the same command. `docs[].docsOutput.style` supports `"nested"`, `"flat"`, `"doc-system"`, and aliases `"docusaurus"` / `"astro-starlight"` (see [Output layouts](docs/GETTING_STARTED.md#output-layouts) in Getting Started). Arbitrary nested UI JSON that is not a Docusaurus catalog belongs in Workflow 3 (`json[]` / `translate-json`), not `docs[]`.
49
63
 
50
- Both workflows share a single `ai-i18n-tools.config.json` file and can be used independently or together. SVG file translation uses `features.translateSVG` plus the top-level `svg` block and runs through `translate-svg` (or the SVG stage inside `sync`).
64
+ **Workflow 3 - JSON file translation** — nested locale JSON without `t()` in source
65
+
66
+ Translate files such as `src/i18n/en/translation.json` via top-level `json[]`, `features.translateJson`, and `translate-json`. Scaffold with `init -t ui-json-bundles`.
67
+
68
+ All workflows share `ai-i18n-tools.config.json` and can be combined; `sync` runs extract, UI translation, translate SVG, `translate-docs`, and `translate-json` in order according to your `features` flags.
51
69
 
52
70
  ---
53
71
 
54
72
  <a id="installation"></a>
55
73
  ## Installation
56
74
 
57
- The published package is **ESM-only** (`"type": "module"`). Use `import` from Node.js, bundlers, or `import()` — `require('ai-i18n-tools')` **is not supported.** The package declares `engines.node` `>=22.16.0`; older Node.js versions are unsupported.
75
+ The published package is **ESM-only** (`"type": "module"`). Node.js `>=22.16.0` required.
58
76
 
59
77
  ```bash
60
78
  npm install ai-i18n-tools
@@ -65,7 +83,7 @@ pnpm add ai-i18n-tools
65
83
  <a id="using-the-cli"></a>
66
84
  ### Using the CLI
67
85
 
68
- **Per-project (recommended)** — install as a dependency or devDependency, then call via `npx`, `pnpm exec`, or a `package.json` script:
86
+ **Per-project (recommended)** — install as a dev dependency, then run via `npx`, `pnpm exec`, or a `package.json` script:
69
87
 
70
88
  ```bash
71
89
  pnpm add -D ai-i18n-tools # or: npm i -D ai-i18n-tools
@@ -74,32 +92,22 @@ npx ai-i18n-tools sync # or: pnpm exec ai-i18n-tools sync
74
92
 
75
93
  ```json
76
94
  "scripts": {
95
+ "i18n:extract": "ai-i18n-tools extract",
77
96
  "i18n:sync": "ai-i18n-tools sync",
97
+ "i18n:translate:ui": "ai-i18n-tools translate-ui",
98
+ "i18n:translate:docs": "ai-i18n-tools translate-docs",
78
99
  "i18n:translate": "ai-i18n-tools translate-docs"
79
100
  }
80
101
  ```
81
102
 
82
- The package manager writes `node_modules/.bin/ai-i18n-tools` with the correct permissions on Linux and macOS and `.cmd` / `.ps1` shims on Windows; script runners pick it up automatically.
103
+ You can also use the ai-i18n-tools CLI commands directly, for instance `ai-i18n-tools sync`.
83
104
 
84
- **Bare** `ai-i18n-tools` **in the terminal:** `package.json` scripts already run with `node_modules/.bin` on `PATH`, so commands like `pnpm run i18n:sync` invoke the CLI without typing `npx`. To run `ai-i18n-tools` directly in an interactive shell (from the project root, after a local install), prepend the local bin directory to `PATH`:
85
105
 
86
- ```bash
87
- # bash/zsh — project root
88
- export PATH="$PWD/node_modules/.bin:$PATH"
89
- ai-i18n-tools sync
90
- ```
91
-
92
- ```powershell
93
- # Windows PowerShell — project root
94
- $env:Path = "$PWD\node_modules\.bin;$env:Path"
95
- ai-i18n-tools sync
96
- ```
106
+ Prefer `sync` over hand-chaining `extract`, `translate-ui`, `translate-svg`, `translate-docs`, and `translate-json` — order and feature flags are easy to get wrong when run manually. See [Recommended `package.json` scripts](docs/GETTING_STARTED.md#recommended-packagejson-scripts) in Getting Started.
97
107
 
98
- With [**direnv**](https://direnv.net/), add `PATH_add node_modules/.bin` to a `.envrc` in the project root so the bare command is available after `cd` into the repo. Without adjusting `PATH`, keep using `npx ai-i18n-tools …` or `pnpm exec ai-i18n-tools …`.
108
+ **Zero-install one-off** — `npx ai-i18n-tools <cmd>` or `pnpm dlx ai-i18n-tools <cmd>` (downloads for that invocation only).
99
109
 
100
- **Zero-install one-off** — `npx ai-i18n-tools <cmd>` or `pnpm dlx ai-i18n-tools <cmd>` (downloads the package for that invocation; no entry in `package.json`).
101
-
102
- On Linux, macOS, and WSL, registry installs set the executable bit on the CLI script automatically. On Windows, package managers generate `.cmd` and `.ps1` shims that invoke Node explicitly.
110
+ > **Tip:** To run `ai-i18n-tools` bare in an interactive shell without `npx`, add `node_modules/.bin` to your `PATH` (bash/zsh: `export PATH="$PWD/node_modules/.bin:$PATH"`). See [Getting Started](docs/GETTING_STARTED.md#installation) for direnv and Windows instructions.
103
111
 
104
112
  Set your OpenRouter API key:
105
113
 
@@ -112,7 +120,7 @@ export OPENROUTER_API_KEY=sk-or-v1-your-key-here
112
120
  <a id="openrouter"></a>
113
121
  ## OpenRouter
114
122
 
115
- Commands that call OpenRouter (`translate-ui`, `translate-docs`, `sync`, `check-models`, and related scripts) need `OPENROUTER_API_KEY` in the environment. `check-markdown` does not use OpenRouter.
123
+ Commands that call OpenRouter (`translate-ui`, `translate-docs`, `translate-json`, `sync`, `check-models`, and related scripts) need `OPENROUTER_API_KEY` in the environment. `check-markdown` does not use OpenRouter.
116
124
 
117
125
  In `ai-i18n-tools.config.json`, the `openrouter` object includes model lists, `baseUrl`, `maxTokens`, `temperature`, and `requestTimeoutMs`: the maximum time in milliseconds to wait for each HTTP request to OpenRouter (chat completions and internal `GET /models` calls). The default is `30000` (30 seconds).
118
126
 
@@ -123,70 +131,67 @@ Run `ai-i18n-tools check-models` to verify each configured model id against Open
123
131
  <a id="quick-start"></a>
124
132
  ## Quick start
125
133
 
126
- <a id="workflow-1---ui-strings"></a>
127
- ### Workflow 1 - UI strings
134
+ <a id="workflow-1---ui-translation"></a>
135
+ ### Workflow 1 - UI Translation
128
136
 
129
137
  ```bash
130
- # 1. Create config
138
+ # 1. Create config (default ui-markdown; plain Astro: init -t ui-astro-website)
131
139
  npx ai-i18n-tools init
132
140
 
133
- # 2. Extract UI strings to strings.json (t(…) literals + optional package.json / manifest strings)
141
+ # 2. Extract UI strings to strings.json
134
142
  npx ai-i18n-tools extract
135
143
 
136
144
  # 3. Translate to all target locales
137
145
  npx ai-i18n-tools translate-ui
138
146
  ```
139
147
 
140
- Wire i18next in your app using the helpers from `'ai-i18n-tools/runtime'`:
141
-
142
- ```js
143
- import i18n from 'i18next';
144
- import { initReactI18next } from 'react-i18next';
145
- import uiLanguages from './locales/ui-languages.json';
146
- import stringsJson from './locales/strings.json';
147
- // Plural flat: ./public/locales/{SOURCE_LOCALE}.json — must match config sourceLocale
148
- import sourcePluralFlat from './public/locales/en-GB.json';
149
- import aiI18n from 'ai-i18n-tools/runtime';
150
-
151
- // Must match sourceLocale in ai-i18n-tools.config.json
152
- export const SOURCE_LOCALE = 'en-GB';
153
-
154
- void i18n.use(initReactI18next).init(aiI18n.defaultI18nInitOptions(SOURCE_LOCALE));
155
- aiI18n.setupKeyAsDefaultT(i18n, {
156
- stringsJson,
157
- sourcePluralFlatBundle: { lng: SOURCE_LOCALE, bundle: sourcePluralFlat },
158
- });
159
- i18n.on('languageChanged', aiI18n.applyDirection);
160
- aiI18n.applyDirection(i18n.language);
161
-
162
- const localeLoaders = aiI18n.makeLocaleLoadersFromManifest(
163
- uiLanguages,
164
- SOURCE_LOCALE,
165
- (code) => () => import(`./locales/${code}.json`),
166
- );
167
- export const loadLocale = aiI18n.makeLoadLocale(i18n, localeLoaders, SOURCE_LOCALE);
168
- export default i18n;
169
- ```
148
+ Then wire i18next in your app using the helpers from `'ai-i18n-tools/runtime'`. See [Step 4: Wire i18next at runtime](docs/GETTING_STARTED.md#step-4-wire-i18next-at-runtime) in the Getting Started guide for the full setup.
149
+
150
+ <a id="workflow-2---document-translation"></a>
151
+ ### Workflow 2 - Document Translation
170
152
 
171
- <a id="workflow-2---documentation"></a>
172
- ### Workflow 2 - Documentation
153
+ The default `init` template (`ui-markdown`) enables UI extraction only. Use a docs-oriented template (or enable `features.translateDocs` and add `docs[]`) before `translate-docs`:
173
154
 
174
155
  ```bash
175
- # 1. Create config for Docusaurus
156
+ # Docusaurus docs + optional write-translations catalog
176
157
  npx ai-i18n-tools init -t ui-docusaurus
177
158
 
178
- # 2. Translate all docs
179
- npx ai-i18n-tools translate-docs
159
+ # Astro Starlight documentation
160
+ # npx ai-i18n-tools init -t ui-starlight
161
+
162
+ # Plain Astro website — UI extraction for t() in .astro; add docs[] for page HTML (see Astro below)
163
+ # npx ai-i18n-tools init -t ui-astro-website
180
164
 
181
- # 3. Check status
165
+ npx ai-i18n-tools translate-docs
182
166
  npx ai-i18n-tools status
167
+ # npx ai-i18n-tools translate-docs --locale de # single locale
183
168
  ```
184
169
 
185
- <a id="both-workflows"></a>
186
- ### Both workflows
170
+ Edit `ai-i18n-tools.config.json`: set `docs[].contentPaths` to markdown, MDX, and/or `.astro` sources; `docs[].outputDir` and `docs[].docsOutput.style` (`"docusaurus"`, `"astro-starlight"`, `"flat"`, etc.). Full field reference: [Workflow 2 - Document Translation](docs/GETTING_STARTED.md#workflow-2---document-translation).
171
+
172
+ <a id="astro-plain-astro--starlight"></a>
173
+ ### Astro (plain Astro & Starlight)
174
+
175
+ **Astro Starlight** — `init -t ui-starlight`, then `translate-docs`. Starlight UI overrides can use `src/content/i18n/en.json` with `jsonPathTemplate` in a separate `docs[]` block when needed ([Getting Started → Workflow 2](docs/GETTING_STARTED.md#step-1-initialise-for-documentation)).
176
+
177
+ **Plain Astro** (marketing or app sites, not Starlight) — combine [Astro built-in i18n routing](https://docs.astro.build/en/guides/internationalization/) with ai-i18n-tools. Reference project: [`examples/astro-website`](examples/astro-website/) (English at `/`, locales at `/{locale}/`).
178
+
179
+ Most teams use a **hybrid** of two pipelines:
180
+
181
+ | Pipeline | Use for | Commands | Output |
182
+ |----------|---------|----------|--------|
183
+ | **Page HTML** | Headings, paragraphs, nav labels, inline arrays in the template body | `translate-docs` | `src/pages/{locale}/index.astro` per locale |
184
+ | **UI strings (`t()`)** | Frontmatter data, tab labels, shared arrays | `extract` → `translate-ui` | `public/locales/{locale}.json` (English source as key) |
185
+
186
+ Scaffold UI with `init -t ui-astro-website`. For hardcoded HTML in `.astro` pages, enable `features.translateDocs` and add a `docs[]` block with `docsOutput.style: "astro-starlight"` (see [Astro website pages (parse-and-replace)](docs/GETTING_STARTED.md#astro-website-pages-parse-and-replace)). Keep `targetLocales`, `i18n.locales` in `astro.config.mjs`, and `ui-languages.json` aligned (Astro routes use lowercase codes such as `pt-br`; flat bundle filenames follow config casing, e.g. `pt-BR.json`).
187
+
188
+ Wire `t()` at build time without i18next unless you add client islands — see [Astro website UI strings (SSG)](docs/GETTING_STARTED.md#astro-website-ui-strings-ssg) and the example’s `src/i18n/t.ts`.
189
+
190
+ <a id="combined-workflow"></a>
191
+ ### Combined workflow
187
192
 
188
193
  ```bash
189
- npx ai-i18n-tools sync # Extract UI strings, then translate UI strings, SVG, and docs
194
+ npx ai-i18n-tools sync # extract → translate-ui → translate-svg → translate-docs → translate-json (per features)
190
195
  ```
191
196
 
192
197
  ---
@@ -196,64 +201,63 @@ npx ai-i18n-tools sync # Extract UI strings, then translate UI strings, SVG, a
196
201
 
197
202
  The following helpers are exported from `'ai-i18n-tools/runtime'` and work in any JavaScript environment. You do not need to import i18next to use them:
198
203
 
199
- | Helper | Description |
200
- |---|---|
201
- | `defaultI18nInitOptions(sourceLocale)` | Standard i18next init options for key-as-default setups. |
202
- | `setupKeyAsDefaultT(i18n, { stringsJson, sourcePluralFlatBundle? })` | Recommended wiring: key-trim + plural `wrapT` from `strings.json`, optionally merges `translate-ui` `{sourceLocale}.json` plural keys. |
203
- | `wrapI18nWithKeyTrim(i18n)` | Lower-level key-trim wrapper only (deprecated for app wiring; prefer `setupKeyAsDefaultT`). |
204
- | `makeLocaleLoadersFromManifest(uiLanguages, sourceLocale, makeLoader)` | Builds the `localeLoaders` map for `makeLoadLocale` from `ui-languages.json` (every `code` except `sourceLocale`). |
205
- | `makeLoadLocale(i18n, loaders, sourceLocale)` | Factory for async locale file loading. |
206
- | `getTextDirection(lng)` | Returns `'ltr'` or `'rtl'` for a BCP-47 code. |
207
- | `applyDirection(lng, element?)` | Sets `dir` attribute on `document.documentElement`. |
208
- | `getUILanguageLabel(lang, t)` | Display label for a language menu row (with i18n). |
209
- | `getUILanguageLabelNative(lang)` | Display label without calling `t()` (header-style). |
210
- | `interpolateTemplate(str, vars)` | Low-level `{{var}}` substitution on a plain string (used internally; app code should use `t()` instead). |
211
- | `flipUiArrowsForRtl(text, isRtl)` | Flip `→` to `←` for RTL layouts. |
204
+ | Helper | Description |
205
+ |------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------|
206
+ | `defaultI18nInitOptions(sourceLocale)` | Standard i18next init options for key-as-default setups. |
207
+ | `setupKeyAsDefaultT(i18n, { stringsJson, sourcePluralFlatBundle? })` | Recommended wiring: key-trim + plural `wrapT` from `strings.json`, optionally merges `translate-ui` `{sourceLocale}.json` plural keys. |
208
+ | `wrapI18nWithKeyTrim(i18n)` | Lower-level key-trim wrapper only (deprecated for app wiring; prefer `setupKeyAsDefaultT`). |
209
+ | `makeLocaleLoadersFromManifest(uiLanguages, sourceLocale, makeLoader)` | Builds the `localeLoaders` map for `makeLoadLocale` from `ui-languages.json` (every `code` except `sourceLocale`). |
210
+ | `makeLoadLocale(i18n, loaders, sourceLocale)` | Factory for async locale file loading. |
211
+ | `getTextDirection(lng)` | Returns `'ltr'` or `'rtl'` for a BCP-47 code. |
212
+ | `applyDirection(lng, element?)` | Sets `dir` attribute on `document.documentElement`. |
213
+ | `getUILanguageLabel(lang, t)` | Display label for a language menu row (with i18n). |
214
+ | `getUILanguageLabelNative(lang)` | Display label without calling `t()` (header-style). |
215
+ | `interpolateTemplate(str, vars)` | Low-level `{{var}}` substitution on a plain string (used internally; app code should use `t()` instead). |
216
+ | `flipUiArrowsForRtl(text, isRtl)` | Flip `→` to `←` for RTL layouts. |
212
217
 
213
218
  ---
214
219
 
215
220
  <a id="cli-commands"></a>
216
221
  ## CLI commands
217
222
 
218
- ```text
219
- ai-i18n-tools version Print version and build timestamp
220
- ai-i18n-tools help [command] Show global or per-command help (same as -h)
221
- ai-i18n-tools init [-t ui-markdown|ui-docusaurus] [-o path] [--with-translate-ignore] Create config file
222
- ai-i18n-tools check-models Validate configured OpenRouter model ids against GET /models (pricing, expiration); requires OPENROUTER_API_KEY
223
- ai-i18n-tools generate-ui-languages [--master path] [--dry-run] Build ui-languages.json from locales + master catalog (needs uiLanguagesPath)
224
- ai-i18n-tools extract Merge scanner output, optional package.json description, optional manifest englishName into strings.json
225
- ai-i18n-tools translate-docs … Translate documentation: markdown/MDX from contentPaths; optional Docusaurus label JSON from jsonSource. Flags include -l/--locale <codes>, -p/-f path, --dry-run,
226
- --force, --force-update, --stats, --clear-cache, --type, --json-only, --no-json, -j, -b,
227
- --prompt-format, --emphasis-placeholders, --no-emphasis-placeholders, --debug-failed
228
- ai-i18n-tools write-heading-ids … Insert HTML anchor lines before ATX headings in .md/.mdx (documentations[])
229
- ai-i18n-tools strip-md-bold-inline … Remove bold (**) around inline code in markdown/MDX (documentations[])
230
- ai-i18n-tools check-markdown [-p|--path <path>] [--json] [--no-cache] Scan documentation markdown for delimiter / inline-code issues and strong-outside-code or strong-outside-link patterns; refresh SQLite markdown_source_issues; exit 1 if any issue
231
- ai-i18n-tools translate-svg … SVG files (features.translateSVG + config.svg); flags include -l/--locale <codes>,
232
- -p/-f path, --dry-run, --force, --force-update, --no-cache, -j, -b
233
- ai-i18n-tools translate-ui … Translate UI strings only; flags include -l/--locale <codes>, --dry-run, --force, -j
234
- ai-i18n-tools lint-source … Run extract, then LLM review of source-locale UI strings (OpenRouter)
235
- ai-i18n-tools export-ui-xliff … Export UI strings to XLIFF 2.0 (one file per locale); -l, -o, --untranslated-only, --dry-run
236
- ai-i18n-tools sync … Extract, then UI / SVG / docs; flags include -l/--locale <codes>, -p/-f path, --dry-run, --force,
237
- --force-update, --no-ui, --no-svg, --no-docs, -j, -b, --emphasis-placeholders,
238
- --no-emphasis-placeholders, --debug-failed
239
- ai-i18n-tools status [--max-columns <n>] UI strings per locale; markdown per file × locale in tables of up to n locales (default 9)
240
- ai-i18n-tools statistics [--max-columns <n>] Documentation cache + strings.json aggregates (same as editor Statistics)
241
- ai-i18n-tools editor Open cache/glossary web editor
242
- ai-i18n-tools cleanup [--dry-run] [--no-backup] [--backup <path>] Runs sync --force-update, then cleans stale + orphaned cache rows; backs up SQLite by default
243
- ai-i18n-tools clean-temp [-r|--root <path>] [-f|--force] [--dry-run] List *.log and cache.db.backup*.sqlite; delete after `y`, with `-f`, or skip if none match
244
- ai-i18n-tools glossary-generate Create empty glossary CSV template
223
+ ```bash
224
+ ai-i18n-tools version
225
+ ai-i18n-tools check-models
226
+ ai-i18n-tools init [-t ui-markdown|ui-docusaurus|ui-starlight|ui-astro-website|ui-json-bundles] [-o path] [--with-translate-ignore]
227
+ ai-i18n-tools write-heading-ids …
228
+ ai-i18n-tools strip-md-bold-inline …
229
+ ai-i18n-tools extract
230
+ ai-i18n-tools translate-docs …
231
+ ai-i18n-tools translate-json …
232
+ ai-i18n-tools translate-svg …
233
+ ai-i18n-tools translate-ui …
234
+ ai-i18n-tools sync-ui …
235
+ ai-i18n-tools lint-source …
236
+ ai-i18n-tools check-markdown [-p|--path <path>] [-f|--file <path>] [--json] [--no-cache]
237
+ ai-i18n-tools export-ui-xliff …
238
+ ai-i18n-tools sync …
239
+ ai-i18n-tools status …
240
+ ai-i18n-tools statistics …
241
+ ai-i18n-tools cleanup …
242
+ ai-i18n-tools clean-temp …
243
+ ai-i18n-tools dashboard …
244
+ ai-i18n-tools generate-ui-languages [--master path] [--dry-run]
245
+ ai-i18n-tools glossary-generate
246
+ ai-i18n-tools help [command]
245
247
  ```
246
248
 
247
- Complete per-command flag lists are maintained next to `src/cli/index.ts` in [CLI flags by command](docs/GETTING_STARTED.md#cli-flags-by-command). Run `ai-i18n-tools <command> --help` for built-in usage text.
248
249
 
249
- Global options on every command: `-c <config>` (default: `ai-i18n-tools.config.json`), `-v` (verbose), optional `-w` / `--write-logs [path]` to tee console output to a log file (default: under the translation cache directory), `-V` / `--version`, and `-h` / `--help`. See [Getting Started](docs/GETTING_STARTED.md#cli-reference) for the command overview table.
250
+ Complete per-command flag lists are in [Getting Started — CLI reference](docs/GETTING_STARTED.md#cli-reference). Run `ai-i18n-tools <command> --help` for built-in usage text.
251
+
252
+ Global options on every command: `-c <config>` (default: `ai-i18n-tools.config.json`), `-v` (verbose), optional `-w` / `--write-logs [path]` to tee console output to a log file (default: under the translation cache directory), `-V` / `--version`, and `-h` / `--help`. Several commands accept `-l` / `--locale <codes>` (comma-separated BCP-47) to limit target locales; `lint-source` uses a single source locale. See [Getting Started](docs/GETTING_STARTED.md#cli-reference) for the command overview table.
250
253
 
251
254
  ---
252
255
 
253
256
  <a id="documentation"></a>
254
257
  ## Documentation
255
258
 
256
- - [Getting Started](docs/GETTING_STARTED.md) - full setup guide for both workflows, CLI reference, and config field reference.
259
+ - [Getting Started](docs/GETTING_STARTED.md) - full setup for all workflows (UI, docs/`.astro`, JSON bundles, Astro Starlight and plain Astro), CLI reference, and config field reference.
260
+ - [Locale assets guide](docs/LOCALE-ASSETS-GUIDE.md) - screenshots and illustrated SVGs in translated docs (Patterns A–E, flat link rewriter, screenshot scripts).
257
261
  - [Package Overview](docs/PACKAGE_OVERVIEW.md) - architecture, internals, programmatic API, and extension points.
258
262
  - [AI Agent Context](docs/ai-i18n-tools-context.md) - **for apps using the package:** integration prompts for downstream projects (copy into your repo’s agent rules).
259
263
  - Maintainer internals for **this** repository: `dev/package-context.md` (clone-only; not on npm).
@@ -1,3 +1,3 @@
1
1
  /** Auto-generated by scripts/write-build-info.mjs — do not edit */
2
- export declare const BUILD_TIMESTAMP_ISO = "2026-05-13T00:03:25.514Z";
2
+ export declare const BUILD_TIMESTAMP_ISO = "2026-05-24T20:45:03.021Z";
3
3
  //# sourceMappingURL=build-info.generated.d.ts.map
@@ -1,3 +1,3 @@
1
1
  /** Auto-generated by scripts/write-build-info.mjs — do not edit */
2
- export const BUILD_TIMESTAMP_ISO = "2026-05-13T00:03:25.514Z";
2
+ export const BUILD_TIMESTAMP_ISO = "2026-05-24T20:45:03.021Z";
3
3
  //# sourceMappingURL=build-info.generated.js.map
@@ -25,11 +25,11 @@ export async function runCheckMarkdown(opts) {
25
25
  ? new TranslationCache(path.join(projectRoot, opts.config.cacheDir))
26
26
  : null;
27
27
  try {
28
- for (let bi = 0; bi < opts.config.documentations.length; bi++) {
29
- const block = opts.config.documentations[bi];
28
+ for (let bi = 0; bi < opts.config.docs.length; bi++) {
29
+ const block = opts.config.docs[bi];
30
30
  const view = toDocTranslateConfig(opts.config, block);
31
31
  const md = filterIgnoredFiles(collectFilesByExtension(block.contentPaths, [".md", ".mdx"], projectRoot), projectRoot).filter((r) => matchesPathFilter(r, opts.pathFilter));
32
- const mdExtractOpts = buildMarkdownExtractOpts(view.documentation);
32
+ const mdExtractOpts = buildMarkdownExtractOpts(view.doc);
33
33
  const extractor = new MarkdownExtractor();
34
34
  for (const relPath of md) {
35
35
  const abs = path.join(projectRoot, relPath);
@@ -1 +1 @@
1
- {"version":3,"file":"check-markdown.js","sourceRoot":"","sources":["../../src/cli/check-markdown.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"check-markdown.js","sourceRoot":"","sources":["../../src/cli/check-markdown.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,16 @@
1
- import type { DocSegmentTranslation, DocumentationBlock, I18nConfig, I18nDocTranslateConfig } from "../core/types.js";
1
+ import type { DocSegmentTranslation, DocBlock, I18nConfig, I18nDocTranslateConfig, Segment, TranslationFailureInsert } from "../core/types.js";
2
2
  export type { DocSegmentTranslation };
3
3
  import { TranslationCache } from "../core/cache.js";
4
4
  import type { MarkdownExtractOptions } from "../extractors/markdown-extractor.js";
5
5
  import { PlaceholderHandler } from "../processors/placeholder-handler.js";
6
+ import type { ExpressionProtectionOptions } from "../processors/expression-attribute-protection.js";
6
7
  import { Glossary } from "../glossary/glossary.js";
7
8
  import { OpenRouterClient } from "../api/openrouter.js";
8
- import type { DocumentBatchResponseFormat } from "../core/prompt-builder.js";
9
+ import type { DocumentBatchResponseFormat, DocumentPromptContentType } from "../core/prompt-builder.js";
9
10
  import { AsyncMutex } from "../utils/concurrency.js";
10
11
  import { FileContentCache } from "./file-content-cache.js";
11
12
  /** Same segment-extraction options as `translate-docs` for one documentation block. */
12
- export declare function buildMarkdownExtractOpts(documentation: DocumentationBlock): MarkdownExtractOptions | undefined;
13
+ export declare function buildMarkdownExtractOpts(doc: DocBlock): MarkdownExtractOptions;
13
14
  /** Batch segment prompt/response shape for `translate-docs --prompt-format`. */
14
15
  export type TranslatePromptFormat = "xml" | "json-array" | "json-object";
15
16
  export declare function translatePromptFormatToResponseFormat(fmt: TranslatePromptFormat | undefined): DocumentBatchResponseFormat;
@@ -25,7 +26,7 @@ export interface TranslateRunOptions {
25
26
  noCache: boolean;
26
27
  verbose: boolean;
27
28
  pathFilter?: string;
28
- typeFilter?: "markdown" | "json";
29
+ typeFilter?: "markdown" | "json" | "astro";
29
30
  jsonOnly?: boolean;
30
31
  noJson?: boolean;
31
32
  /** Path to the active log file (printed in the header block). */
@@ -49,7 +50,7 @@ export interface TranslateRunOptions {
49
50
  promptFormat?: TranslatePromptFormat;
50
51
  /**
51
52
  * Set when `translate-docs` / `sync` passes `--emphasis-placeholders` (mask emphasis for all locales unless
52
- * `documentations[].emphasisPlaceholders` overrides).
53
+ * `docs[].emphasisPlaceholders` overrides).
53
54
  */
54
55
  emphasisPlaceholdersCli?: boolean;
55
56
  /**
@@ -89,11 +90,12 @@ type ProtectState = ReturnType<PlaceholderHandler["protectForTranslation"]> & {
89
90
  glossaryForceReplacements?: string[];
90
91
  };
91
92
  /** Glossary forced tokens first, then markdown URL/admonition/(optional) emphasis protection when `useMarkdownPlaceholders`. */
92
- export declare function protectSegmentForTranslation(raw: string, glossary: Glossary, locale: string, useMarkdownPlaceholders: boolean, emphasisPlaceholders?: boolean): {
93
+ export declare function protectSegmentForTranslation(raw: string, glossary: Glossary, locale: string, useMarkdownPlaceholders: boolean, emphasisPlaceholders?: boolean, expressionProtection?: ExpressionProtectionOptions): {
93
94
  text: string;
94
95
  state: ProtectState;
95
96
  };
96
97
  export declare function shouldRunMarkdown(opts: TranslateRunOptions, config: I18nDocTranslateConfig): boolean;
98
+ export declare function shouldRunAstro(opts: TranslateRunOptions, config: I18nDocTranslateConfig): boolean;
97
99
  export declare function shouldRunJson(opts: TranslateRunOptions, config: I18nDocTranslateConfig): boolean;
98
100
  export declare function matchesPathFilter(relPath: string, filter: string | undefined): boolean;
99
101
  /**
@@ -113,7 +115,7 @@ export declare function normalizePathFilterForProjectRoot(projectRoot: string, r
113
115
  export declare function isProjectRelUnderBlockContentPath(projectRoot: string, relPosix: string, block: {
114
116
  contentPaths: string[];
115
117
  }): boolean;
116
- export declare function isProjectRelUnderAnyDocumentationContentPath(projectRoot: string, relPosix: string, documentations: Array<{
118
+ export declare function isProjectRelUnderAnyDocumentationContentPath(projectRoot: string, relPosix: string, docs: Array<{
117
119
  contentPaths: string[];
118
120
  }>): boolean;
119
121
  /**
@@ -121,18 +123,57 @@ export declare function isProjectRelUnderAnyDocumentationContentPath(projectRoot
121
123
  * (single file or all markdown files under a directory).
122
124
  */
123
125
  export declare function expandPathFilterToMarkdownPaths(projectRoot: string, pathFilter: string | undefined): string[];
126
+ /**
127
+ * Expand a normalized project-root `--path` / `--file` to concrete `.astro` paths.
128
+ */
129
+ export declare function expandPathFilterToAstroPaths(projectRoot: string, pathFilter: string | undefined): string[];
124
130
  export interface AugmentMarkdownFromPathFilterResult {
125
131
  markdown: string[];
126
132
  warnings: string[];
127
133
  }
134
+ export interface AugmentAstroFromPathFilterResult {
135
+ astro: string[];
136
+ warnings: string[];
137
+ }
128
138
  /**
129
139
  * When the user passes `--path` / `--file`, include matching markdown that normal discovery
130
140
  * skipped (outside `contentPaths`, or under this block but filtered e.g. by `.translate-ignore`).
131
141
  * Paths outside every `contentPaths` are only attached to `documentations[0]`.
132
142
  */
133
- export declare function augmentMarkdownFilesFromPathFilter(projectRoot: string, pathFilter: string | undefined, documentationBlockIndex: number, documentations: Array<{
143
+ export declare function augmentMarkdownFilesFromPathFilter(projectRoot: string, pathFilter: string | undefined, documentationBlockIndex: number, docs: Array<{
134
144
  contentPaths: string[];
135
145
  }>, markdownDiscovered: string[]): AugmentMarkdownFromPathFilterResult;
146
+ /** Same as {@link augmentMarkdownFilesFromPathFilter} for `.astro` pages. */
147
+ export declare function augmentAstroFilesFromPathFilter(projectRoot: string, pathFilter: string | undefined, documentationBlockIndex: number, docs: Array<{
148
+ contentPaths: string[];
149
+ }>, astroDiscovered: string[]): AugmentAstroFromPathFilterResult;
150
+ type FailureTracker = {
151
+ clearSegmentFailures: (sourceHash: string, locale: string) => Promise<void>;
152
+ addSegmentFailures: (rows: TranslationFailureInsert[]) => Promise<void>;
153
+ };
154
+ export declare function translateSegmentsBatched(batchable: Segment[], placeholderById: Map<string, ProtectState>,
155
+ /** Pre-placeholder markdown source per segment hash; empty for json/svg (original is on the segment). */
156
+ originalContentByHash: Map<string, string>, locale: string, glossary: Glossary, client: OpenRouterClient | null, dryRun: boolean, verbose: boolean, batchSize: number, maxBatchChars: number, contentType: DocumentPromptContentType, batchConcurrency: number,
157
+ /** OpenRouter batch: XML &lt;seg&gt;/&lt;t&gt; vs JSON array/object (see `--prompt-format`). */
158
+ batchResponseFormat: DocumentBatchResponseFormat, docLog?: {
159
+ relativePath: string;
160
+ totalSegments: number;
161
+ /** For each entry in `batchable`, index into the full extracted segment list (0-based). */
162
+ segmentIndicesInDoc: number[];
163
+ },
164
+ /** Absolute `cacheDir` path; writes `*-FAILED-TRANSLATION-*.log` on markdown quality failures. */
165
+ failureLogDirAbs?: string | null, failureTracker?: FailureTracker,
166
+ /** Cwd-relative source path stored on failure rows for dashboard UI when cache has no segment yet. */
167
+ failureDocMeta?: {
168
+ filepath: string;
169
+ }): Promise<{
170
+ map: Map<string, DocSegmentTranslation>;
171
+ inTok: number;
172
+ outTok: number;
173
+ cost: number;
174
+ segmentValidationFailures: number;
175
+ individualSegmentTranslations: number;
176
+ }>;
136
177
  /**
137
178
  * Locale-independent: read source, extract segments (same options as translation), then refresh
138
179
  * `markdown_source_issues` and stderr warnings. Call once per markdown file before parallel
@@ -143,6 +184,10 @@ export declare function translateMarkdownFile(absSource: string, relPath: string
143
184
  skipped: boolean;
144
185
  totals: TranslateTotals;
145
186
  }>;
187
+ export declare function translateAstroFile(absSource: string, relPath: string, locale: string, config: I18nDocTranslateConfig, cache: TranslationCache | null, client: OpenRouterClient | null, glossary: Glossary, opts: TranslateRunOptions, hitKeys: Set<string>, fileContentCache?: FileContentCache): Promise<{
188
+ skipped: boolean;
189
+ totals: TranslateTotals;
190
+ }>;
146
191
  export declare function translateJsonFile(absSource: string, relPath: string, locale: string, config: I18nDocTranslateConfig, cache: TranslationCache | null, client: OpenRouterClient | null, glossary: Glossary, opts: TranslateRunOptions, hitKeys: Set<string>, fileContentCache?: FileContentCache): Promise<{
147
192
  skipped: boolean;
148
193
  totals: TranslateTotals;
@@ -157,5 +202,6 @@ export declare function rewriteSourceMarkdownLanguageListBlocks(config: I18nDocT
157
202
  export declare function runTranslate(config: I18nDocTranslateConfig, opts: TranslateRunOptions, files: {
158
203
  markdown: string[];
159
204
  json: string[];
205
+ astro: string[];
160
206
  }, jsonAbsRoot: string): Promise<TranslateTotals>;
161
207
  //# sourceMappingURL=doc-translate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"doc-translate.d.ts","sourceRoot":"","sources":["../../src/cli/doc-translate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doc-translate.d.ts","sourceRoot":"","sources":["../../src/cli/doc-translate.ts"],"names":[],"mappings":"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"}