ai-i18n-tools 1.4.4 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (187) hide show
  1. package/README.md +60 -106
  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,12 +7,14 @@
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
+ CLI and toolkit for internationalising JavaScript/TypeScript applications and documentation sites using large language models via [OpenRouter](https://openrouter.ai/). Two independent workflows: **UI Translation** extracts `t("…")` calls and writes locale-ready JSON for i18next; **Document Translation** translates markdown, MDX, and SVG files with a smart SQLite cache so only changed segments are re-sent to the LLM.
11
11
 
12
12
 
13
13
  <small>**Read in other languages:** </small>
14
14
  <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
15
 
16
+ <small>Translated READMEs and docs are committed under [`translated-docs/`](https://github.com/wsj-br/ai-i18n-tools/tree/main/translated-docs) on GitHub; the npm package ships English `docs/` only.</small>
17
+
16
18
  <!-- START doctoc generated TOC please keep comment here to allow auto update -->
17
19
  <!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
18
20
  **Table of Contents**
@@ -22,8 +24,8 @@ CLI and toolkit for internationalizing JavaScript/TypeScript applications and do
22
24
  - [Using the CLI](#using-the-cli)
23
25
  - [OpenRouter](#openrouter)
24
26
  - [Quick start](#quick-start)
25
- - [Workflow 1 - UI strings](#workflow-1---ui-strings)
26
- - [Workflow 2 - Documentation](#workflow-2---documentation)
27
+ - [Workflow 1 - UI Translation](#workflow-1---ui-translation)
28
+ - [Workflow 2 - Document Translation](#workflow-2---document-translation)
27
29
  - [Both workflows](#both-workflows)
28
30
  - [Runtime helpers](#runtime-helpers)
29
31
  - [CLI commands](#cli-commands)
@@ -39,22 +41,22 @@ CLI and toolkit for internationalizing JavaScript/TypeScript applications and do
39
41
  <a id="two-core-workflows"></a>
40
42
  ## Two core workflows
41
43
 
42
- **Workflow 1 - UI Translation** (React, Next.js, Node.js, any i18next project)
44
+ **Workflow 1 - UI Translation** — for any JS/TS project using i18next (React, Next.js, Node.js, CLIs)
43
45
 
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.
46
+ Scans source files for `t("…")` / `i18n.t("…")` literals, builds a master catalog (`strings.json`), translates missing entries per locale via OpenRouter, and writes flat JSON files (`de.json`, `pt-BR.json`, …) ready for i18next.
45
47
 
46
- **Workflow 2 - Document translation** (Markdown / MDX, optional Docusaurus shell JSON)
48
+ **Workflow 2 - Document Translation** for markdown/MDX docs (Docusaurus, Astro Starlight, plain README files) and `.astro` page HTML (plain Astro marketing sites)
47
49
 
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).
50
+ Translates `.md`, `.mdx`, and `.astro` source files to every target locale with a shared SQLite cache only new or changed segments are sent to the LLM. Optional Docusaurus shell JSON (`jsonSource`, from `write-translations`) covers navbar, footer, and theme UI strings. SVG file translation is enabled via `features.translateSVG` and the top-level `svg` block. For plain Astro sites, see [`examples/astro-website`](examples/astro-website/) (hybrid: `translate-docs` for page HTML plus `t()` for frontmatter strings).
49
51
 
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`).
52
+ Both workflows share a single `ai-i18n-tools.config.json` file and can be used independently or together.
51
53
 
52
54
  ---
53
55
 
54
56
  <a id="installation"></a>
55
57
  ## Installation
56
58
 
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.
59
+ The published package is **ESM-only** (`"type": "module"`). Node.js `>=22.16.0` required.
58
60
 
59
61
  ```bash
60
62
  npm install ai-i18n-tools
@@ -65,7 +67,7 @@ pnpm add ai-i18n-tools
65
67
  <a id="using-the-cli"></a>
66
68
  ### Using the CLI
67
69
 
68
- **Per-project (recommended)** — install as a dependency or devDependency, then call via `npx`, `pnpm exec`, or a `package.json` script:
70
+ **Per-project (recommended)** — install as a dev dependency, then run via `npx`, `pnpm exec`, or a `package.json` script:
69
71
 
70
72
  ```bash
71
73
  pnpm add -D ai-i18n-tools # or: npm i -D ai-i18n-tools
@@ -79,27 +81,9 @@ npx ai-i18n-tools sync # or: pnpm exec ai-i18n-tools sync
79
81
  }
80
82
  ```
81
83
 
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.
83
-
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
-
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
- ```
97
-
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 …`.
99
-
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`).
84
+ **Zero-install one-off** `npx ai-i18n-tools <cmd>` or `pnpm dlx ai-i18n-tools <cmd>` (downloads for that invocation only).
101
85
 
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.
86
+ > **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
87
 
104
88
  Set your OpenRouter API key:
105
89
 
@@ -123,57 +107,30 @@ Run `ai-i18n-tools check-models` to verify each configured model id against Open
123
107
  <a id="quick-start"></a>
124
108
  ## Quick start
125
109
 
126
- <a id="workflow-1---ui-strings"></a>
127
- ### Workflow 1 - UI strings
110
+ <a id="workflow-1---ui-translation"></a>
111
+ ### Workflow 1 - UI Translation
128
112
 
129
113
  ```bash
130
114
  # 1. Create config
131
115
  npx ai-i18n-tools init
132
116
 
133
- # 2. Extract UI strings to strings.json (t(…) literals + optional package.json / manifest strings)
117
+ # 2. Extract UI strings to strings.json
134
118
  npx ai-i18n-tools extract
135
119
 
136
120
  # 3. Translate to all target locales
137
121
  npx ai-i18n-tools translate-ui
138
122
  ```
139
123
 
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
- ```
124
+ 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.
170
125
 
171
- <a id="workflow-2---documentation"></a>
172
- ### Workflow 2 - Documentation
126
+ <a id="workflow-2---document-translation"></a>
127
+ ### Workflow 2 - Document Translation
173
128
 
174
129
  ```bash
175
130
  # 1. Create config for Docusaurus
176
131
  npx ai-i18n-tools init -t ui-docusaurus
132
+ # Astro Starlight: npx ai-i18n-tools init -t ui-starlight
133
+ # Plain Astro website (UI + optional page HTML): npx ai-i18n-tools init -t ui-astro-website
177
134
 
178
135
  # 2. Translate all docs
179
136
  npx ai-i18n-tools translate-docs
@@ -196,55 +153,51 @@ npx ai-i18n-tools sync # Extract UI strings, then translate UI strings, SVG, a
196
153
 
197
154
  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
155
 
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. |
156
+ | Helper | Description |
157
+ |------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------|
158
+ | `defaultI18nInitOptions(sourceLocale)` | Standard i18next init options for key-as-default setups. |
159
+ | `setupKeyAsDefaultT(i18n, { stringsJson, sourcePluralFlatBundle? })` | Recommended wiring: key-trim + plural `wrapT` from `strings.json`, optionally merges `translate-ui` `{sourceLocale}.json` plural keys. |
160
+ | `wrapI18nWithKeyTrim(i18n)` | Lower-level key-trim wrapper only (deprecated for app wiring; prefer `setupKeyAsDefaultT`). |
161
+ | `makeLocaleLoadersFromManifest(uiLanguages, sourceLocale, makeLoader)` | Builds the `localeLoaders` map for `makeLoadLocale` from `ui-languages.json` (every `code` except `sourceLocale`). |
162
+ | `makeLoadLocale(i18n, loaders, sourceLocale)` | Factory for async locale file loading. |
163
+ | `getTextDirection(lng)` | Returns `'ltr'` or `'rtl'` for a BCP-47 code. |
164
+ | `applyDirection(lng, element?)` | Sets `dir` attribute on `document.documentElement`. |
165
+ | `getUILanguageLabel(lang, t)` | Display label for a language menu row (with i18n). |
166
+ | `getUILanguageLabelNative(lang)` | Display label without calling `t()` (header-style). |
167
+ | `interpolateTemplate(str, vars)` | Low-level `{{var}}` substitution on a plain string (used internally; app code should use `t()` instead). |
168
+ | `flipUiArrowsForRtl(text, isRtl)` | Flip `→` to `←` for RTL layouts. |
212
169
 
213
170
  ---
214
171
 
215
172
  <a id="cli-commands"></a>
216
173
  ## CLI commands
217
174
 
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
175
+ ```bash
176
+ ai-i18n-tools version
177
+ ai-i18n-tools help [command]
178
+ ai-i18n-tools init [-t ui-markdown|ui-docusaurus] [-o path] [--with-translate-ignore]
179
+ ai-i18n-tools check-models
180
+ ai-i18n-tools generate-ui-languages [--master path] [--dry-run]
181
+ ai-i18n-tools extract
182
+ ai-i18n-tools translate-docs …
183
+ ai-i18n-tools write-heading-ids
184
+ ai-i18n-tools strip-md-bold-inline
185
+ ai-i18n-tools check-markdown [-p|--path <path>] [--json] [--no-cache]
186
+ ai-i18n-tools translate-svg
187
+ ai-i18n-tools translate-ui
188
+ ai-i18n-tools lint-source
189
+ ai-i18n-tools export-ui-xliff
190
+ ai-i18n-tools sync
191
+ ai-i18n-tools status [--max-columns <n>]
192
+ ai-i18n-tools statistics [--max-columns <n>]
193
+ ai-i18n-tools dashboard
194
+ ai-i18n-tools cleanup [--dry-run] [--no-backup] [--backup <path>]
195
+ ai-i18n-tools clean-temp [-r|--root <path>] [-f|--force] [--dry-run]
196
+ ai-i18n-tools glossary-generate
245
197
  ```
246
198
 
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.
199
+
200
+ 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.
248
201
 
249
202
  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
203
 
@@ -254,6 +207,7 @@ Global options on every command: `-c <config>` (default: `ai-i18n-tools.config.j
254
207
  ## Documentation
255
208
 
256
209
  - [Getting Started](docs/GETTING_STARTED.md) - full setup guide for both workflows, CLI reference, and config field reference.
210
+ - [Locale assets guide](docs/LOCALE-ASSETS-GUIDE.md) - screenshots and illustrated SVGs in translated docs (Patterns A–E, flat link rewriter, screenshot scripts).
257
211
  - [Package Overview](docs/PACKAGE_OVERVIEW.md) - architecture, internals, programmatic API, and extension points.
258
212
  - [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
213
  - 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-24T19:52:06.081Z";
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-24T19:52:06.081Z";
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":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,EAAE,+BAA+B,EAAE,MAAM,8CAA8C,CAAC;AAC/F,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAEjF,SAAS,kBAAkB,CAAC,KAAe,EAAE,GAAW;IACtD,MAAM,EAAE,GAAG,mBAAmB,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC;IACzD,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACrE,CAAC;AAoBD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAA0B;IAC/D,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC;IAC7B,MAAM,QAAQ,GAA2B,EAAE,CAAC;IAC5C,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,MAAM,KAAK,GACT,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ;QACnC,CAAC,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACpE,CAAC,CAAC,IAAI,CAAC;IAEX,IAAI,CAAC;QACH,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC;YACpD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAE,CAAC;YACpC,MAAM,IAAI,GAAG,oBAAoB,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YACtD,MAAM,EAAE,GAAG,kBAAkB,CAC3B,uBAAuB,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,WAAW,CAAC,EACzE,WAAW,CACZ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YAEvD,MAAM,aAAa,GAAG,wBAAwB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACzD,MAAM,SAAS,GAAG,IAAI,iBAAiB,EAAE,CAAC;YAE1C,KAAK,MAAM,OAAO,IAAI,EAAE,EAAE,CAAC;gBACzB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;gBAC5C,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;gBAC7C,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;gBACpE,MAAM,QAAQ,GAAG,4BAA4B,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;gBAC3D,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,+BAA+B,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;gBAEnF,IAAI,KAAK,EAAE,CAAC;oBACV,KAAK,CAAC,gCAAgC,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;gBACzD,CAAC;gBAED,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;oBACvB,UAAU,EAAE,CAAC;oBACb,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;wBACd,QAAQ,CAAC,IAAI,CAAC;4BACZ,QAAQ,EAAE,GAAG,CAAC,QAAQ;4BACtB,WAAW,EAAE,OAAO;4BACpB,IAAI,EAAE,GAAG,CAAC,SAAS;4BACnB,SAAS,EAAE,GAAG,CAAC,SAAS;4BACxB,MAAM,EAAE,GAAG,CAAC,MAAM;4BAClB,UAAU,EAAE,GAAG,CAAC,UAAU;yBAC3B,CAAC,CAAC;oBACL,CAAC;yBAAM,CAAC;wBACN,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC;wBAClC,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,IAAI,IAAI,EAAE,CAAC;4BAC9B,KAAK,CAAC,MAAM,CACV,MAAM,GAAG,CAAC,SAAS,KAAK,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACvF,CACJ,CAAC;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;YAAS,CAAC;QACT,KAAK,EAAE,KAAK,EAAE,CAAC;IACjB,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAChF,CAAC;SAAM,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CAAC,uBAAuB,UAAU,oCAAoC,CAAC,CACjF,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC,CAAC;IAChF,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC9C,CAAC"}
@@ -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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"}