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.
- package/README.md +60 -106
- package/dist/build-info.generated.d.ts +1 -1
- package/dist/build-info.generated.js +1 -1
- package/dist/cli/check-markdown.js +3 -3
- package/dist/cli/check-markdown.js.map +1 -1
- package/dist/cli/doc-translate.d.ts +54 -8
- package/dist/cli/doc-translate.d.ts.map +1 -1
- package/dist/cli/doc-translate.js +378 -41
- package/dist/cli/doc-translate.js.map +1 -1
- package/dist/cli/extract-strings.d.ts.map +1 -1
- package/dist/cli/extract-strings.js +12 -10
- package/dist/cli/extract-strings.js.map +1 -1
- package/dist/cli/index.js +231 -88
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/lint-source.js +3 -3
- package/dist/cli/lint-source.js.map +1 -1
- package/dist/cli/translate-json-run.d.ts +11 -0
- package/dist/cli/translate-json-run.d.ts.map +1 -0
- package/dist/cli/translate-json-run.js +164 -0
- package/dist/cli/translate-json-run.js.map +1 -0
- package/dist/cli/translate-ui-strings.d.ts.map +1 -1
- package/dist/cli/translate-ui-strings.js +2 -6
- package/dist/cli/translate-ui-strings.js.map +1 -1
- package/dist/cli/write-heading-ids.d.ts +1 -1
- package/dist/cli/write-heading-ids.d.ts.map +1 -1
- package/dist/cli/write-heading-ids.js +2 -2
- package/dist/cli/write-heading-ids.js.map +1 -1
- package/dist/core/config-migrate.d.ts +22 -0
- package/dist/core/config-migrate.d.ts.map +1 -0
- package/dist/core/config-migrate.js +168 -0
- package/dist/core/config-migrate.js.map +1 -0
- package/dist/core/config.d.ts +8 -4
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +181 -45
- package/dist/core/config.js.map +1 -1
- package/dist/core/doc-file-tracking.d.ts +1 -4
- package/dist/core/doc-file-tracking.d.ts.map +1 -1
- package/dist/core/doc-file-tracking.js +14 -7
- package/dist/core/doc-file-tracking.js.map +1 -1
- package/dist/core/docs-output-normalize.d.ts +14 -0
- package/dist/core/docs-output-normalize.d.ts.map +1 -0
- package/dist/core/docs-output-normalize.js +57 -0
- package/dist/core/docs-output-normalize.js.map +1 -0
- package/dist/core/locale-utils.d.ts +6 -0
- package/dist/core/locale-utils.d.ts.map +1 -1
- package/dist/core/locale-utils.js +8 -0
- package/dist/core/locale-utils.js.map +1 -1
- package/dist/core/markdown-emphasis-defaults.d.ts +6 -6
- package/dist/core/markdown-emphasis-defaults.d.ts.map +1 -1
- package/dist/core/markdown-emphasis-defaults.js +12 -12
- package/dist/core/markdown-emphasis-defaults.js.map +1 -1
- package/dist/core/output-paths.d.ts +2 -2
- package/dist/core/output-paths.d.ts.map +1 -1
- package/dist/core/output-paths.js +43 -19
- package/dist/core/output-paths.js.map +1 -1
- package/dist/core/project-stats.d.ts.map +1 -1
- package/dist/core/project-stats.js +2 -2
- package/dist/core/project-stats.js.map +1 -1
- package/dist/core/resolve-content-paths.d.ts +12 -0
- package/dist/core/resolve-content-paths.d.ts.map +1 -0
- package/dist/core/resolve-content-paths.js +122 -0
- package/dist/core/resolve-content-paths.js.map +1 -0
- package/dist/core/svg-asset-paths.d.ts +2 -2
- package/dist/core/svg-asset-paths.d.ts.map +1 -1
- package/dist/core/svg-asset-paths.js +10 -6
- package/dist/core/svg-asset-paths.js.map +1 -1
- package/dist/core/types.d.ts +248 -31
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +119 -28
- package/dist/core/types.js.map +1 -1
- package/dist/core/ui-extractor-config.d.ts +6 -0
- package/dist/core/ui-extractor-config.d.ts.map +1 -0
- package/dist/core/ui-extractor-config.js +7 -0
- package/dist/core/ui-extractor-config.js.map +1 -0
- package/dist/core/ui-languages.d.ts +6 -1
- package/dist/core/ui-languages.d.ts.map +1 -1
- package/dist/core/ui-languages.js +58 -4
- package/dist/core/ui-languages.js.map +1 -1
- package/dist/core/user-edited-model.d.ts +1 -1
- package/dist/core/user-edited-model.d.ts.map +1 -1
- package/dist/core/user-edited-model.js +1 -1
- package/dist/core/user-edited-model.js.map +1 -1
- package/dist/{edit-cache-app → dashboard-app}/app.js +22 -15
- package/dist/{edit-cache-app → dashboard-app}/index.html +15 -13
- package/dist/{edit-cache-app → dashboard-app}/styles.css +11 -11
- package/dist/extractors/astro-template-extractor.d.ts +39 -0
- package/dist/extractors/astro-template-extractor.d.ts.map +1 -0
- package/dist/extractors/astro-template-extractor.js +622 -0
- package/dist/extractors/astro-template-extractor.js.map +1 -0
- package/dist/extractors/frontmatter-fields.d.ts +25 -0
- package/dist/extractors/frontmatter-fields.d.ts.map +1 -0
- package/dist/extractors/frontmatter-fields.js +160 -0
- package/dist/extractors/frontmatter-fields.js.map +1 -0
- package/dist/extractors/markdown-extractor.d.ts +2 -0
- package/dist/extractors/markdown-extractor.d.ts.map +1 -1
- package/dist/extractors/markdown-extractor.js +61 -10
- package/dist/extractors/markdown-extractor.js.map +1 -1
- package/dist/extractors/nested-json-extractor.d.ts +15 -0
- package/dist/extractors/nested-json-extractor.d.ts.map +1 -0
- package/dist/extractors/nested-json-extractor.js +132 -0
- package/dist/extractors/nested-json-extractor.js.map +1 -0
- package/dist/extractors/ui-string-babel.d.ts +15 -0
- package/dist/extractors/ui-string-babel.d.ts.map +1 -1
- package/dist/extractors/ui-string-babel.js +135 -0
- package/dist/extractors/ui-string-babel.js.map +1 -1
- package/dist/extractors/ui-string-extractor.js +2 -2
- package/dist/extractors/ui-string-extractor.js.map +1 -1
- package/dist/extractors/ui-string-locations.js +2 -2
- package/dist/extractors/ui-string-locations.js.map +1 -1
- package/dist/glossary/glossary.d.ts.map +1 -1
- package/dist/glossary/glossary.js +3 -11
- package/dist/glossary/glossary.js.map +1 -1
- package/dist/glossary/parse-glossary-csv.d.ts +5 -0
- package/dist/glossary/parse-glossary-csv.d.ts.map +1 -0
- package/dist/glossary/parse-glossary-csv.js +21 -0
- package/dist/glossary/parse-glossary-csv.js.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/markdown/write-heading-ids-core.d.ts +3 -2
- package/dist/markdown/write-heading-ids-core.d.ts.map +1 -1
- package/dist/markdown/write-heading-ids-core.js +26 -12
- package/dist/markdown/write-heading-ids-core.js.map +1 -1
- package/dist/processors/doc-postprocess.d.ts.map +1 -1
- package/dist/processors/doc-postprocess.js +6 -6
- package/dist/processors/doc-postprocess.js.map +1 -1
- package/dist/processors/expression-attribute-protection.d.ts +24 -0
- package/dist/processors/expression-attribute-protection.d.ts.map +1 -0
- package/dist/processors/expression-attribute-protection.js +76 -0
- package/dist/processors/expression-attribute-protection.js.map +1 -0
- package/dist/processors/flat-link-rewrite.d.ts +16 -0
- package/dist/processors/flat-link-rewrite.d.ts.map +1 -1
- package/dist/processors/flat-link-rewrite.js +23 -0
- package/dist/processors/flat-link-rewrite.js.map +1 -1
- package/dist/processors/mdx-placeholders.d.ts +2 -7
- package/dist/processors/mdx-placeholders.d.ts.map +1 -1
- package/dist/processors/mdx-placeholders.js +15 -14
- package/dist/processors/mdx-placeholders.js.map +1 -1
- package/dist/processors/placeholder-handler.d.ts +2 -0
- package/dist/processors/placeholder-handler.d.ts.map +1 -1
- package/dist/processors/placeholder-handler.js +1 -1
- package/dist/processors/placeholder-handler.js.map +1 -1
- package/dist/processors/validator.d.ts +8 -0
- package/dist/processors/validator.d.ts.map +1 -1
- package/dist/processors/validator.js +69 -15
- package/dist/processors/validator.js.map +1 -1
- package/dist/server/{translation-editor.d.ts → translation-dashboard.d.ts} +8 -8
- package/dist/server/translation-dashboard.d.ts.map +1 -0
- package/dist/server/{translation-editor.js → translation-dashboard.js} +15 -15
- package/dist/server/translation-dashboard.js.map +1 -0
- package/docs/GETTING_STARTED.md +689 -253
- package/docs/LOCALE-ASSETS-GUIDE.md +671 -0
- package/docs/PACKAGE_OVERVIEW.md +59 -25
- package/docs/ai-i18n-tools-context.md +143 -18
- package/docs/translation-dashboard.png +0 -0
- package/package.json +17 -31
- package/dist/server/translation-editor.d.ts.map +0 -1
- package/dist/server/translation-editor.js.map +0 -1
- package/docs/translation-cache-editor.png +0 -0
- package/translated-docs/README.de.md +0 -261
- package/translated-docs/README.es.md +0 -261
- package/translated-docs/README.fr.md +0 -261
- package/translated-docs/README.hi.md +0 -261
- package/translated-docs/README.ja.md +0 -261
- package/translated-docs/README.ko.md +0 -261
- package/translated-docs/README.pt-BR.md +0 -261
- package/translated-docs/README.zh-CN.md +0 -261
- package/translated-docs/README.zh-TW.md +0 -261
- package/translated-docs/docs/GETTING_STARTED.de.md +0 -1269
- package/translated-docs/docs/GETTING_STARTED.es.md +0 -1269
- package/translated-docs/docs/GETTING_STARTED.fr.md +0 -1269
- package/translated-docs/docs/GETTING_STARTED.hi.md +0 -1269
- package/translated-docs/docs/GETTING_STARTED.ja.md +0 -1269
- package/translated-docs/docs/GETTING_STARTED.ko.md +0 -1269
- package/translated-docs/docs/GETTING_STARTED.pt-BR.md +0 -1269
- package/translated-docs/docs/GETTING_STARTED.zh-CN.md +0 -1269
- package/translated-docs/docs/GETTING_STARTED.zh-TW.md +0 -1269
- package/translated-docs/docs/PACKAGE_OVERVIEW.de.md +0 -495
- package/translated-docs/docs/PACKAGE_OVERVIEW.es.md +0 -495
- package/translated-docs/docs/PACKAGE_OVERVIEW.fr.md +0 -495
- package/translated-docs/docs/PACKAGE_OVERVIEW.hi.md +0 -495
- package/translated-docs/docs/PACKAGE_OVERVIEW.ja.md +0 -495
- package/translated-docs/docs/PACKAGE_OVERVIEW.ko.md +0 -495
- package/translated-docs/docs/PACKAGE_OVERVIEW.pt-BR.md +0 -495
- package/translated-docs/docs/PACKAGE_OVERVIEW.zh-CN.md +0 -495
- package/translated-docs/docs/PACKAGE_OVERVIEW.zh-TW.md +0 -495
package/README.md
CHANGED
|
@@ -7,12 +7,14 @@
|
|
|
7
7
|
[](./LICENSE)
|
|
8
8
|
[](https://github.com/wsj-br/ai-i18n-tools/actions/workflows/ci.yml)
|
|
9
9
|
|
|
10
|
-
CLI and toolkit for
|
|
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
|
|
26
|
-
- [Workflow 2 -
|
|
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,
|
|
44
|
+
**Workflow 1 - UI Translation** — for any JS/TS project using i18next (React, Next.js, Node.js, CLIs)
|
|
43
45
|
|
|
44
|
-
|
|
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
|
|
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
|
|
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.
|
|
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"`).
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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-
|
|
127
|
-
### Workflow 1 - UI
|
|
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
|
|
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
|
-
|
|
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---
|
|
172
|
-
### Workflow 2 -
|
|
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
|
|
200
|
-
|
|
201
|
-
| `defaultI18nInitOptions(sourceLocale)`
|
|
202
|
-
| `setupKeyAsDefaultT(i18n, { stringsJson, sourcePluralFlatBundle? })`
|
|
203
|
-
| `wrapI18nWithKeyTrim(i18n)`
|
|
204
|
-
| `makeLocaleLoadersFromManifest(uiLanguages, sourceLocale, makeLoader)` | Builds the `localeLoaders` map for `makeLoadLocale` from `ui-languages.json` (every `code` except `sourceLocale`).
|
|
205
|
-
| `makeLoadLocale(i18n, loaders, sourceLocale)`
|
|
206
|
-
| `getTextDirection(lng)`
|
|
207
|
-
| `applyDirection(lng, element?)`
|
|
208
|
-
| `getUILanguageLabel(lang, t)`
|
|
209
|
-
| `getUILanguageLabelNative(lang)`
|
|
210
|
-
| `interpolateTemplate(str, vars)`
|
|
211
|
-
| `flipUiArrowsForRtl(text, isRtl)`
|
|
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
|
-
```
|
|
219
|
-
ai-i18n-tools version
|
|
220
|
-
ai-i18n-tools help [command]
|
|
221
|
-
ai-i18n-tools init [-t ui-markdown|ui-docusaurus] [-o path] [--with-translate-ignore]
|
|
222
|
-
ai-i18n-tools check-models
|
|
223
|
-
ai-i18n-tools generate-ui-languages [--master path] [--dry-run]
|
|
224
|
-
ai-i18n-tools extract
|
|
225
|
-
ai-i18n-tools translate-docs …
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
ai-i18n-tools
|
|
229
|
-
ai-i18n-tools
|
|
230
|
-
ai-i18n-tools
|
|
231
|
-
ai-i18n-tools
|
|
232
|
-
|
|
233
|
-
ai-i18n-tools
|
|
234
|
-
ai-i18n-tools
|
|
235
|
-
ai-i18n-tools
|
|
236
|
-
ai-i18n-tools
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
ai-i18n-tools
|
|
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
|
-
|
|
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).
|
|
@@ -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.
|
|
29
|
-
const block = opts.config.
|
|
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.
|
|
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":"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,
|
|
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,
|
|
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(
|
|
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
|
-
* `
|
|
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,
|
|
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,
|
|
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 <seg>/<t> 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":"AAKA,OAAO,KAAK,EACV,qBAAqB,EACrB,
|
|
1
|
+
{"version":3,"file":"doc-translate.d.ts","sourceRoot":"","sources":["../../src/cli/doc-translate.ts"],"names":[],"mappings":"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"}
|