i18ntk 3.1.0 → 3.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -1
- package/README.md +221 -96
- package/package.json +2 -1
- package/ui-locales/de.json +13 -13
- package/ui-locales/en.json +13 -13
- package/ui-locales/es.json +13 -13
- package/ui-locales/fr.json +13 -13
- package/ui-locales/ja.json +13 -13
- package/ui-locales/ru.json +15 -15
- package/ui-locales/zh.json +13 -13
package/CHANGELOG.md
CHANGED
|
@@ -5,7 +5,21 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
-
## [3.1.
|
|
8
|
+
## [3.1.1] - 2026-05-07
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- **Auto Translate protection file workflow**: Added user-editable `i18ntk-auto-translate.json` support for protected terms, key paths, exact values, and regex patterns.
|
|
12
|
+
- **Public package README guard**: Public package staging now verifies `README.md` is included and non-empty before publish.
|
|
13
|
+
|
|
14
|
+
### Changed
|
|
15
|
+
- Updated README and release documentation for the current Auto Translate protection workflow and public package contents.
|
|
16
|
+
- Removed project-specific hardcoded validation examples so users configure their own brand and domain terms.
|
|
17
|
+
|
|
18
|
+
### Fixed
|
|
19
|
+
- Removed provider-shaped fake secret fixtures from tests to avoid GitHub push protection false positives.
|
|
20
|
+
- Ensured public package metadata includes `readmeFilename: "README.md"` so npm can render the package README.
|
|
21
|
+
|
|
22
|
+
## [3.1.0] - 2026-05-07
|
|
9
23
|
|
|
10
24
|
### Added
|
|
11
25
|
- **Placeholder-preserve translation mode**: Translates text segments around dynamic placeholders and reinserts the original tokens exactly.
|
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# i18ntk v3.1.
|
|
1
|
+
# i18ntk v3.1.1
|
|
2
2
|
|
|
3
|
-
Zero-dependency internationalization toolkit for setup, scanning, analysis, validation, usage tracking, translation completion, automatic locale translation, and runtime translation loading.
|
|
3
|
+
Zero-dependency internationalization toolkit for setup, scanning, analysis, validation, usage tracking, translation completion, automatic JSON locale translation, reporting, and runtime translation loading.
|
|
4
4
|
|
|
5
5
|

|
|
6
6
|
|
|
@@ -9,40 +9,7 @@ Zero-dependency internationalization toolkit for setup, scanning, analysis, vali
|
|
|
9
9
|
[](https://nodejs.org)
|
|
10
10
|
[](https://www.npmjs.com/package/i18ntk)
|
|
11
11
|
[](LICENSE)
|
|
12
|
-
[. For migration notes, see [docs/migration-guide-v3.1.0.md](./docs/migration-guide-v3.1.0.md).
|
|
24
|
-
|
|
25
|
-
## What i18ntk Does
|
|
26
|
-
|
|
27
|
-
- Zero runtime dependencies
|
|
28
|
-
- Interactive and non-interactive project setup
|
|
29
|
-
- Translation completeness analysis and usage tracking
|
|
30
|
-
- Validation, sizing, and summary reporting
|
|
31
|
-
- Missing-key completion and fixer workflows
|
|
32
|
-
- Automatic translation of JSON locale files
|
|
33
|
-
- Runtime translation helpers for application code
|
|
34
|
-
- Support for JS/TS, React, Vue, Angular, and generic projects
|
|
35
|
-
|
|
36
|
-
## Getting Started
|
|
37
|
-
|
|
38
|
-
1. Install the package.
|
|
39
|
-
2. Run `i18ntk` or `i18ntk --command=init` to initialize the project.
|
|
40
|
-
3. Confirm the source language and locale directories.
|
|
41
|
-
4. Run `i18ntk --command=analyze` or `i18ntk --command=validate` to inspect translation coverage.
|
|
42
|
-
5. Use `i18ntk --command=complete` to fill missing keys when needed.
|
|
43
|
-
6. Use `i18ntk --command=translate` or menu option 14 to auto-translate source JSON files.
|
|
44
|
-
|
|
45
|
-
The full onboarding flow is documented in [docs/getting-started.md](docs/getting-started.md).
|
|
12
|
+
[](https://socket.dev/npm/package/i18ntk/overview/3.1.1)
|
|
46
13
|
|
|
47
14
|
## Install
|
|
48
15
|
|
|
@@ -57,11 +24,29 @@ npm install --save-dev i18ntk
|
|
|
57
24
|
npx i18ntk --help
|
|
58
25
|
```
|
|
59
26
|
|
|
60
|
-
|
|
27
|
+
Requirements:
|
|
28
|
+
|
|
29
|
+
- Node.js `>=16.0.0`
|
|
30
|
+
- npm `>=8.0.0`
|
|
31
|
+
- No runtime dependencies
|
|
61
32
|
|
|
62
|
-
|
|
33
|
+
## What's New in 3.1.1
|
|
63
34
|
|
|
64
|
-
|
|
35
|
+
- Auto Translate can translate strings that contain placeholders by translating text around the placeholders and reinserting the original tokens.
|
|
36
|
+
- Auto Translate supports user-editable protection rules in `i18ntk-auto-translate.json` for brand names, product terms, exact values, key paths, and regex patterns.
|
|
37
|
+
- The manager Auto Translate flow runs in-process, avoiding production `child_process` usage for that command.
|
|
38
|
+
- The target-language prompt supports `all` to translate into every configured target language while excluding the source language.
|
|
39
|
+
- Source-directory prompts are clearer and accept absolute paths or project-relative paths.
|
|
40
|
+
- Validation warnings now distinguish URLs, email addresses, secret-like values, and likely untranslated English content.
|
|
41
|
+
- Sizing reports now include per-language file counts, file-set mismatches, and per-file key/character statistics.
|
|
42
|
+
- Internal UI locale coverage is enforced against the English UI locale.
|
|
43
|
+
- Public package staging verifies `README.md` is present before publish.
|
|
44
|
+
|
|
45
|
+
See [CHANGELOG.md](./CHANGELOG.md) and [docs/migration-guide-v3.1.1.md](./docs/migration-guide-v3.1.1.md) for release details.
|
|
46
|
+
|
|
47
|
+
## Quick Start
|
|
48
|
+
|
|
49
|
+
Initialize a project:
|
|
65
50
|
|
|
66
51
|
```bash
|
|
67
52
|
i18ntk
|
|
@@ -69,24 +54,41 @@ i18ntk
|
|
|
69
54
|
i18ntk --command=init
|
|
70
55
|
```
|
|
71
56
|
|
|
72
|
-
|
|
57
|
+
Run common checks:
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
i18ntk --command=analyze
|
|
61
|
+
i18ntk --command=validate
|
|
62
|
+
i18ntk --command=usage
|
|
63
|
+
i18ntk --command=sizing
|
|
64
|
+
i18ntk --command=summary
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Complete or fix translation files:
|
|
73
68
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
-
|
|
77
|
-
|
|
78
|
-
- output directory
|
|
79
|
-
- backup behavior
|
|
69
|
+
```bash
|
|
70
|
+
i18ntk --command=complete
|
|
71
|
+
i18ntk-fixer --help
|
|
72
|
+
```
|
|
80
73
|
|
|
81
|
-
|
|
74
|
+
Auto-translate locale JSON:
|
|
82
75
|
|
|
83
76
|
```bash
|
|
84
|
-
i18ntk --command=
|
|
77
|
+
i18ntk --command=translate
|
|
78
|
+
# or
|
|
79
|
+
i18ntk-translate locales/en/common.json de --report-stdout
|
|
85
80
|
```
|
|
86
81
|
|
|
87
|
-
|
|
82
|
+
The full onboarding guide is in [docs/getting-started.md](./docs/getting-started.md).
|
|
83
|
+
|
|
84
|
+
## Main Commands
|
|
85
|
+
|
|
86
|
+
Primary CLI:
|
|
88
87
|
|
|
89
88
|
```bash
|
|
89
|
+
i18ntk
|
|
90
|
+
i18ntk --help
|
|
91
|
+
i18ntk --command=init
|
|
90
92
|
i18ntk --command=analyze
|
|
91
93
|
i18ntk --command=validate
|
|
92
94
|
i18ntk --command=usage
|
|
@@ -95,9 +97,10 @@ i18ntk --command=sizing
|
|
|
95
97
|
i18ntk --command=complete
|
|
96
98
|
i18ntk --command=translate
|
|
97
99
|
i18ntk --command=summary
|
|
100
|
+
i18ntk --command=debug
|
|
98
101
|
```
|
|
99
102
|
|
|
100
|
-
Standalone
|
|
103
|
+
Standalone executables:
|
|
101
104
|
|
|
102
105
|
```bash
|
|
103
106
|
i18ntk-init
|
|
@@ -114,10 +117,11 @@ i18ntk-backup
|
|
|
114
117
|
i18ntk-translate
|
|
115
118
|
```
|
|
116
119
|
|
|
117
|
-
Note: `i18ntk --command=backup`
|
|
118
|
-
|
|
120
|
+
Note: manager route `i18ntk --command=backup` is disabled in current builds. Use `i18ntk-backup` directly for backup operations.
|
|
121
|
+
|
|
122
|
+
## Common Options
|
|
119
123
|
|
|
120
|
-
|
|
124
|
+
Most commands support:
|
|
121
125
|
|
|
122
126
|
- `--source-dir <path>`
|
|
123
127
|
- `--i18n-dir <path>`
|
|
@@ -128,18 +132,6 @@ Use the standalone `i18ntk-backup` executable when backup operations are require
|
|
|
128
132
|
- `--dry-run`
|
|
129
133
|
- `--help`
|
|
130
134
|
|
|
131
|
-
Auto Translate also supports:
|
|
132
|
-
|
|
133
|
-
- `--source-lang <code>`
|
|
134
|
-
- `--files <pattern>`
|
|
135
|
-
- `--preserve-placeholders`
|
|
136
|
-
- `--skip-placeholders`
|
|
137
|
-
- `--send-placeholders`
|
|
138
|
-
- `--batch-size <n>`
|
|
139
|
-
- `--progress-interval <n>`
|
|
140
|
-
- `--report-file <path>`
|
|
141
|
-
- `--report-stdout`
|
|
142
|
-
|
|
143
135
|
Example:
|
|
144
136
|
|
|
145
137
|
```bash
|
|
@@ -148,7 +140,7 @@ i18ntk --command=analyze --source-dir=./src --i18n-dir=./locales --output-dir=./
|
|
|
148
140
|
|
|
149
141
|
## Auto Translate
|
|
150
142
|
|
|
151
|
-
Interactive
|
|
143
|
+
Interactive manager flow:
|
|
152
144
|
|
|
153
145
|
```bash
|
|
154
146
|
i18ntk
|
|
@@ -160,16 +152,117 @@ Direct CLI examples:
|
|
|
160
152
|
```bash
|
|
161
153
|
i18ntk-translate locales/en/common.json de
|
|
162
154
|
i18ntk-translate locales/en/common.json fr --dry-run --report-stdout
|
|
163
|
-
i18ntk-translate locales/en es --files "*.json" --no-confirm --preserve-placeholders
|
|
155
|
+
i18ntk-translate locales/en es --source-dir locales/en --files "*.json" --no-confirm --preserve-placeholders
|
|
164
156
|
```
|
|
165
157
|
|
|
166
|
-
The manager flow
|
|
158
|
+
The manager flow asks for:
|
|
159
|
+
|
|
160
|
+
- source locale directory
|
|
161
|
+
- source language code
|
|
162
|
+
- one or more target languages, or `all`
|
|
163
|
+
- one JSON file or all JSON files in the source directory
|
|
164
|
+
|
|
165
|
+
Before writing files, the manager can run a dry-run preview. After confirmation it writes translated files under sibling target-language folders, for example:
|
|
166
|
+
|
|
167
|
+
```text
|
|
168
|
+
locales/en/common.json
|
|
169
|
+
locales/de/common.json
|
|
170
|
+
locales/fr/common.json
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### Placeholder Handling
|
|
174
|
+
|
|
175
|
+
Auto Translate detects common placeholders such as:
|
|
176
|
+
|
|
177
|
+
- `{name}`
|
|
178
|
+
- `{{count}}`
|
|
179
|
+
- `%s`
|
|
180
|
+
- `%d`
|
|
181
|
+
- `:id`
|
|
182
|
+
- `%{name}`
|
|
183
|
+
- `${value}`
|
|
184
|
+
|
|
185
|
+
Useful flags:
|
|
186
|
+
|
|
187
|
+
- `--preserve-placeholders`: translate text around placeholders and reinsert original tokens
|
|
188
|
+
- `--skip-placeholders`: copy placeholder-bearing strings unchanged
|
|
189
|
+
- `--send-placeholders`: send placeholder-bearing strings through translation after masking
|
|
190
|
+
- `--custom-regex <regex>`: add project-specific placeholder detection
|
|
167
191
|
|
|
168
|
-
|
|
192
|
+
### Protected Terms and Keys
|
|
193
|
+
|
|
194
|
+
Auto Translate can create and use a project-local protection file:
|
|
195
|
+
|
|
196
|
+
```bash
|
|
197
|
+
i18ntk-translate locales/en/common.json de --create-protection-file --protection-file ./i18ntk-auto-translate.json
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
Example `i18ntk-auto-translate.json`:
|
|
201
|
+
|
|
202
|
+
```json
|
|
203
|
+
{
|
|
204
|
+
"version": 1,
|
|
205
|
+
"terms": ["BrandName", "PRODUCT_CODE", "API"],
|
|
206
|
+
"keys": ["app.brandName", "legal.companyName", "product.*.symbol"],
|
|
207
|
+
"values": ["BrandName Ltd", "support@example.com"],
|
|
208
|
+
"patterns": ["[A-Z]{2,}-\\d+"]
|
|
209
|
+
}
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
- `terms` are masked before translation and restored exactly afterward.
|
|
213
|
+
- `keys` are exact key paths or `*` wildcard paths copied unchanged.
|
|
214
|
+
- `values` are exact source values copied unchanged.
|
|
215
|
+
- `patterns` are JavaScript regex strings for advanced protected substrings.
|
|
216
|
+
|
|
217
|
+
Useful flags:
|
|
218
|
+
|
|
219
|
+
- `--protection-file <path>`
|
|
220
|
+
- `--create-protection-file`
|
|
221
|
+
- `--no-protection`
|
|
222
|
+
|
|
223
|
+
Open Settings and choose `Auto Translate Beta` to edit defaults for placeholder mode, concurrency, batch size, retry settings, report output, BOM output, protection file path, first-run setup prompt, and update prompt.
|
|
224
|
+
|
|
225
|
+
See [docs/auto-translate.md](./docs/auto-translate.md) for the full Auto Translate guide.
|
|
226
|
+
|
|
227
|
+
## Validation
|
|
228
|
+
|
|
229
|
+
Validation checks locale structure, completeness, placeholders, and content risks.
|
|
230
|
+
|
|
231
|
+
In 3.1.1, warning types are more specific:
|
|
232
|
+
|
|
233
|
+
- `Potential risky content`: URL, email address, or secret-like value
|
|
234
|
+
- `Possible untranslated English content`: target-language value appears to contain too much English
|
|
235
|
+
|
|
236
|
+
English-content warnings include:
|
|
237
|
+
|
|
238
|
+
- detected English percentage
|
|
239
|
+
- configured threshold
|
|
240
|
+
- matched word count
|
|
241
|
+
- sample matched words
|
|
242
|
+
|
|
243
|
+
Tune warnings in `.i18ntk-config`:
|
|
244
|
+
|
|
245
|
+
```json
|
|
246
|
+
{
|
|
247
|
+
"englishContentThresholdPercent": 10,
|
|
248
|
+
"allowedEnglishTerms": ["BrandName", "PRODUCT_CODE"]
|
|
249
|
+
}
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
## Sizing Analysis
|
|
253
|
+
|
|
254
|
+
`i18ntk-sizing` reports translation file sizes, key counts, average value length, and file-set mismatches across language folders.
|
|
255
|
+
|
|
256
|
+
```bash
|
|
257
|
+
i18ntk-sizing --source-dir ./locales --format table
|
|
258
|
+
i18ntk-sizing --source-dir ./locales --detailed --output-dir ./i18ntk-reports
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
Use `--detailed` to print per-file rows in the terminal.
|
|
169
262
|
|
|
170
263
|
## Runtime API
|
|
171
264
|
|
|
172
|
-
Use `i18ntk/runtime` when
|
|
265
|
+
Use `i18ntk/runtime` when an application needs to read locale JSON files at runtime.
|
|
173
266
|
|
|
174
267
|
```js
|
|
175
268
|
const runtime = require('i18ntk/runtime');
|
|
@@ -189,15 +282,17 @@ console.log(runtime.getAvailableLanguages());
|
|
|
189
282
|
runtime.refresh('fr');
|
|
190
283
|
```
|
|
191
284
|
|
|
192
|
-
|
|
285
|
+
See [docs/runtime.md](./docs/runtime.md) for runtime details.
|
|
193
286
|
|
|
194
287
|
## Configuration
|
|
195
288
|
|
|
196
|
-
|
|
289
|
+
i18ntk uses a project-local `.i18ntk-config` file.
|
|
290
|
+
|
|
291
|
+
Example:
|
|
197
292
|
|
|
198
293
|
```json
|
|
199
294
|
{
|
|
200
|
-
"version": "3.1.
|
|
295
|
+
"version": "3.1.1",
|
|
201
296
|
"sourceDir": "./locales",
|
|
202
297
|
"i18nDir": "./locales",
|
|
203
298
|
"outputDir": "./i18ntk-reports",
|
|
@@ -206,8 +301,20 @@ Example `.i18ntk-config`:
|
|
|
206
301
|
"englishContentThresholdPercent": 10,
|
|
207
302
|
"allowedEnglishTerms": ["BrandName", "PRODUCT_CODE"],
|
|
208
303
|
"autoTranslate": {
|
|
304
|
+
"placeholderMode": "preserve",
|
|
305
|
+
"concurrency": 6,
|
|
306
|
+
"batchSize": 100,
|
|
307
|
+
"progressInterval": 25,
|
|
308
|
+
"retryCount": 3,
|
|
309
|
+
"retryDelay": 1000,
|
|
310
|
+
"timeout": 15000,
|
|
311
|
+
"dryRunFirst": true,
|
|
312
|
+
"reportStdout": true,
|
|
313
|
+
"bom": false,
|
|
209
314
|
"protectionEnabled": true,
|
|
210
|
-
"protectionFile": "./i18ntk-auto-translate.json"
|
|
315
|
+
"protectionFile": "./i18ntk-auto-translate.json",
|
|
316
|
+
"promptProtectionSetup": true,
|
|
317
|
+
"promptProtectionUpdate": true
|
|
211
318
|
},
|
|
212
319
|
"setup": {
|
|
213
320
|
"completed": true
|
|
@@ -215,34 +322,52 @@ Example `.i18ntk-config`:
|
|
|
215
322
|
}
|
|
216
323
|
```
|
|
217
324
|
|
|
218
|
-
See [docs/api/CONFIGURATION.md](docs/api/CONFIGURATION.md) for the full configuration model.
|
|
325
|
+
See [docs/api/CONFIGURATION.md](./docs/api/CONFIGURATION.md) for the full configuration model.
|
|
219
326
|
|
|
220
|
-
##
|
|
327
|
+
## Public Package Contents
|
|
221
328
|
|
|
222
|
-
-
|
|
223
|
-
- [Getting Started](https://github.com/vladnoskv/i18ntk/blob/main/docs/getting-started.md)
|
|
224
|
-
- [API Reference](https://github.com/vladnoskv/i18ntk/blob/main/docs/api/API_REFERENCE.md)
|
|
225
|
-
- [Configuration Guide](https://github.com/vladnoskv/i18ntk/blob/main/docs/api/CONFIGURATION.md)
|
|
226
|
-
- [Runtime API Guide](https://github.com/vladnoskv/i18ntk/blob/main/docs/runtime.md)
|
|
227
|
-
- [Auto Translate Guide](https://github.com/vladnoskv/i18ntk/blob/main/docs/auto-translate.md)
|
|
228
|
-
- [Scanner Guide](https://github.com/vladnoskv/i18ntk/blob/main/docs/scanner-guide.md)
|
|
229
|
-
- [Environment Variables](https://github.com/vladnoskv/i18ntk/blob/main/docs/environment-variables.md)
|
|
230
|
-
- [Migration Guide v3.1.0](https://github.com/vladnoskv/i18ntk/blob/main/docs/migration-guide-v3.1.0.md)
|
|
231
|
-
- [Migration Guide v3.0.0](https://github.com/vladnoskv/i18ntk/blob/main/docs/migration-guide-v3.0.0.md)
|
|
232
|
-
- [Migration Guide v2.6.0](https://github.com/vladnoskv/i18ntk/blob/main/docs/migration-guide-v2.6.0.md)
|
|
233
|
-
- [Migration Guide v2.5.1](https://github.com/vladnoskv/i18ntk/blob/main/docs/migration-guide-v2.5.1.md)
|
|
329
|
+
The public package intentionally ships runtime and CLI files only. The publish staging script excludes development-only content such as tests, scripts, docs, release staging folders, local config files, and generated protection files.
|
|
234
330
|
|
|
235
|
-
|
|
331
|
+
The package includes:
|
|
332
|
+
|
|
333
|
+
- CLI entry points under `main/`
|
|
334
|
+
- manager commands and services
|
|
335
|
+
- runtime API files under `runtime/`
|
|
336
|
+
- settings UI files required at runtime
|
|
337
|
+
- bundled internal UI locales
|
|
338
|
+
- shared utilities required by the shipped commands
|
|
339
|
+
- `README.md`, `CHANGELOG.md`, `LICENSE`, and policy files
|
|
236
340
|
|
|
237
|
-
|
|
238
|
-
- [Code of Conduct](CODE_OF_CONDUCT.md)
|
|
239
|
-
- [Security Policy](SECURITY.md)
|
|
240
|
-
- [Funding](FUNDING.md)
|
|
341
|
+
The public package manifest includes `readmeFilename: "README.md"`, and the release staging script fails if `README.md` is missing or empty.
|
|
241
342
|
|
|
242
|
-
##
|
|
343
|
+
## Documentation
|
|
344
|
+
|
|
345
|
+
- [Documentation Index](./docs/README.md)
|
|
346
|
+
- [Getting Started](./docs/getting-started.md)
|
|
347
|
+
- [API Reference](./docs/api/API_REFERENCE.md)
|
|
348
|
+
- [Configuration Guide](./docs/api/CONFIGURATION.md)
|
|
349
|
+
- [Runtime API Guide](./docs/runtime.md)
|
|
350
|
+
- [Auto Translate Guide](./docs/auto-translate.md)
|
|
351
|
+
- [Scanner Guide](./docs/scanner-guide.md)
|
|
352
|
+
- [Environment Variables](./docs/environment-variables.md)
|
|
353
|
+
- [Migration Guide v3.1.1](./docs/migration-guide-v3.1.1.md)
|
|
354
|
+
- [Migration Guide v3.0.0](./docs/migration-guide-v3.0.0.md)
|
|
355
|
+
- [Migration Guide v2.6.0](./docs/migration-guide-v2.6.0.md)
|
|
356
|
+
- [Migration Guide v2.5.1](./docs/migration-guide-v2.5.1.md)
|
|
357
|
+
|
|
358
|
+
## Security
|
|
359
|
+
|
|
360
|
+
- No API key is required for the default Auto Translate flow.
|
|
361
|
+
- Do not store secrets in locale files, `.i18ntk-config`, or protection files.
|
|
362
|
+
- Project-specific brand/product terms should be configured by the user, not hardcoded into the package.
|
|
363
|
+
- Report security issues using [SECURITY.md](./SECURITY.md).
|
|
364
|
+
|
|
365
|
+
## Community
|
|
243
366
|
|
|
244
|
-
|
|
367
|
+
- [Contributing](./CONTRIBUTING.md)
|
|
368
|
+
- [Code of Conduct](./CODE_OF_CONDUCT.md)
|
|
369
|
+
- [Funding](./FUNDING.md)
|
|
245
370
|
|
|
246
371
|
## License
|
|
247
372
|
|
|
248
|
-
|
|
373
|
+
MIT. See [LICENSE](./LICENSE).
|
package/package.json
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "i18ntk",
|
|
3
|
-
"version": "3.1.
|
|
3
|
+
"version": "3.1.1",
|
|
4
4
|
"description": "Zero-dependency internationalization toolkit for setup, scanning, analysis, validation, auto translation, fixing, reporting, and runtime translation loading.",
|
|
5
|
+
"readmeFilename": "README.md",
|
|
5
6
|
"keywords": [
|
|
6
7
|
"i18n",
|
|
7
8
|
"internationalization",
|
package/ui-locales/de.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"meta": {
|
|
3
|
-
"version": "3.1.
|
|
3
|
+
"version": "3.1.1",
|
|
4
4
|
"updated": "2026-05-07"
|
|
5
5
|
},
|
|
6
6
|
"common": {
|
|
@@ -1105,18 +1105,18 @@
|
|
|
1105
1105
|
"warningProceedingWithoutFramework": "Fortfahren ohne erkanntes i18n-Framework."
|
|
1106
1106
|
},
|
|
1107
1107
|
"language": {
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1108
|
+
"title": "🌍 Sprache ändern",
|
|
1109
|
+
"separator": "============================================================",
|
|
1110
|
+
"current": "Aktuelle Sprache: {language}",
|
|
1111
|
+
"available": "Verfügbare Sprachen:",
|
|
1112
|
+
"languageOption": "{index}. {displayName}{current}",
|
|
1113
|
+
"backToMainMenu": "Zurück zum Hauptmenü",
|
|
1114
|
+
"prompt": "Wähle eine Sprache (0–8):",
|
|
1115
|
+
"cancelled": "Sprachwechsel abgebrochen.",
|
|
1116
|
+
"invalid": "Ungültige Auswahl. Bitte erneut versuchen.",
|
|
1117
|
+
"changed": "Sprache geändert zu: {language}",
|
|
1118
|
+
"changeFailed": "Sprachwechsel fehlgeschlagen: {error}",
|
|
1119
|
+
"pressEnterToContinue": "Drücke Enter, um fortzufahren..."
|
|
1120
1120
|
},
|
|
1121
1121
|
"maintainLanguagePurity": {
|
|
1122
1122
|
"workflow_title": "🚀 Workflow zur Wahrung der Sprachreinheit",
|
package/ui-locales/en.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"meta": {
|
|
3
|
-
"version": "3.1.
|
|
3
|
+
"version": "3.1.1",
|
|
4
4
|
"updated": "2026-05-07"
|
|
5
5
|
},
|
|
6
6
|
"common": {
|
|
@@ -1105,18 +1105,18 @@
|
|
|
1105
1105
|
"warningProceedingWithoutFramework": "Proceeding without detected i18n framework."
|
|
1106
1106
|
},
|
|
1107
1107
|
"language": {
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1108
|
+
"title": "🌍 Change Language",
|
|
1109
|
+
"separator": "============================================================",
|
|
1110
|
+
"current": "Current language: {language}",
|
|
1111
|
+
"available": "Available Languages:",
|
|
1112
|
+
"languageOption": "{index}. {displayName}{current}",
|
|
1113
|
+
"backToMainMenu": "Back to Main Menu",
|
|
1114
|
+
"prompt": "Select a language (0-8):",
|
|
1115
|
+
"cancelled": "Language change cancelled.",
|
|
1116
|
+
"invalid": "Invalid choice. Please try again.",
|
|
1117
|
+
"changed": "Language changed to: {language}",
|
|
1118
|
+
"changeFailed": "Failed to change language: {error}",
|
|
1119
|
+
"pressEnterToContinue": "Press Enter to continue..."
|
|
1120
1120
|
},
|
|
1121
1121
|
"maintainLanguagePurity": {
|
|
1122
1122
|
"workflow_title": "🚀 Language Purity Maintenance Workflow",
|
package/ui-locales/es.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"meta": {
|
|
3
|
-
"version": "3.1.
|
|
3
|
+
"version": "3.1.1",
|
|
4
4
|
"updated": "2026-05-07"
|
|
5
5
|
},
|
|
6
6
|
"common": {
|
|
@@ -1105,18 +1105,18 @@
|
|
|
1105
1105
|
"warningProceedingWithoutFramework": "Procediendo sin marco i18n detectado."
|
|
1106
1106
|
},
|
|
1107
1107
|
"language": {
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1108
|
+
"title": "🌍 Cambiar Idioma",
|
|
1109
|
+
"separator": "============================================================",
|
|
1110
|
+
"current": "Idioma actual: {language}",
|
|
1111
|
+
"available": "Idiomas Disponibles:",
|
|
1112
|
+
"languageOption": "{index}. {displayName}{current}",
|
|
1113
|
+
"backToMainMenu": "Volver al Menú Principal",
|
|
1114
|
+
"prompt": "Selecciona un idioma (0-8):",
|
|
1115
|
+
"cancelled": "Cambio de idioma cancelado.",
|
|
1116
|
+
"invalid": "Opción inválida. Por favor intenta de nuevo.",
|
|
1117
|
+
"changed": "Idioma cambiado a: {language}",
|
|
1118
|
+
"changeFailed": "Error al cambiar el idioma: {error}",
|
|
1119
|
+
"pressEnterToContinue": "Presiona Enter para continuar..."
|
|
1120
1120
|
},
|
|
1121
1121
|
"maintainLanguagePurity": {
|
|
1122
1122
|
"workflow_title": "🚀 Flujo de Trabajo de Mantenimiento de Pureza de Idioma",
|
package/ui-locales/fr.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"meta": {
|
|
3
|
-
"version": "3.1.
|
|
3
|
+
"version": "3.1.1",
|
|
4
4
|
"updated": "2026-05-07"
|
|
5
5
|
},
|
|
6
6
|
"common": {
|
|
@@ -1105,18 +1105,18 @@
|
|
|
1105
1105
|
"warningProceedingWithoutFramework": "Poursuite sans framework i18n détecté."
|
|
1106
1106
|
},
|
|
1107
1107
|
"language": {
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1108
|
+
"title": "🌍 Changer la langue",
|
|
1109
|
+
"separator": "============================================================",
|
|
1110
|
+
"current": "Langue actuelle : {language}",
|
|
1111
|
+
"available": "Langues disponibles :",
|
|
1112
|
+
"languageOption": "{index}. {displayName}{current}",
|
|
1113
|
+
"backToMainMenu": "Retour au menu principal",
|
|
1114
|
+
"prompt": "Sélectionnez une langue (0-8) :",
|
|
1115
|
+
"cancelled": "Changement de langue annulé.",
|
|
1116
|
+
"invalid": "Choix invalide. Veuillez réessayer.",
|
|
1117
|
+
"changed": "Langue changée en : {language}",
|
|
1118
|
+
"changeFailed": "Échec du changement de langue : {error}",
|
|
1119
|
+
"pressEnterToContinue": "Appuyez sur Entrée pour continuer…"
|
|
1120
1120
|
},
|
|
1121
1121
|
"maintainLanguagePurity": {
|
|
1122
1122
|
"workflow_title": "🚀 Flux de maintenance de la pureté linguistique",
|
package/ui-locales/ja.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"meta": {
|
|
3
|
-
"version": "3.1.
|
|
3
|
+
"version": "3.1.1",
|
|
4
4
|
"updated": "2026-05-07"
|
|
5
5
|
},
|
|
6
6
|
"common": {
|
|
@@ -1105,18 +1105,18 @@
|
|
|
1105
1105
|
"warningProceedingWithoutFramework": "i18n フレームワークが検出されないまま続行します。"
|
|
1106
1106
|
},
|
|
1107
1107
|
"language": {
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1108
|
+
"title": "🌍 言語を変更",
|
|
1109
|
+
"separator": "============================================================",
|
|
1110
|
+
"current": "現在の言語: {language}",
|
|
1111
|
+
"available": "利用可能な言語:",
|
|
1112
|
+
"languageOption": "{index}。 {displayName}{current}",
|
|
1113
|
+
"backToMainMenu": "メインメニューに戻る",
|
|
1114
|
+
"prompt": "言語を選択してください (0-8):",
|
|
1115
|
+
"cancelled": "言語変更がキャンセルされました。",
|
|
1116
|
+
"invalid": "無効な選択です。もう一度お試しください。",
|
|
1117
|
+
"changed": "言語が {language} に変更されました",
|
|
1118
|
+
"changeFailed": "言語の変更に失敗しました: {error}",
|
|
1119
|
+
"pressEnterToContinue": "続行するにはEnterキーを押してください…"
|
|
1120
1120
|
},
|
|
1121
1121
|
"maintainLanguagePurity": {
|
|
1122
1122
|
"workflow_title": "🚀 言語純度維持ワークフロー",
|
package/ui-locales/ru.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"meta": {
|
|
3
|
-
"version": "3.1.
|
|
3
|
+
"version": "3.1.1",
|
|
4
4
|
"updated": "2026-05-07"
|
|
5
5
|
},
|
|
6
6
|
"common": {
|
|
@@ -1105,18 +1105,18 @@
|
|
|
1105
1105
|
"warningProceedingWithoutFramework": "Продолжаем без обнаружения платформы i18n."
|
|
1106
1106
|
},
|
|
1107
1107
|
"language": {
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1108
|
+
"title": "🌍 Сменить язык",
|
|
1109
|
+
"separator": "============================================================",
|
|
1110
|
+
"current": "Текущий язык: {language}",
|
|
1111
|
+
"available": "Доступные языки:",
|
|
1112
|
+
"languageOption": "{index}. {displayName}{current}",
|
|
1113
|
+
"backToMainMenu": "Вернуться в главное меню",
|
|
1114
|
+
"prompt": "Выберите язык (0-8):",
|
|
1115
|
+
"cancelled": "Смена языка отменена.",
|
|
1116
|
+
"invalid": "Неверный выбор. Пожалуйста, попробуйте снова.",
|
|
1117
|
+
"changed": "Язык изменён на: {language}",
|
|
1118
|
+
"changeFailed": "Не удалось сменить язык: {error}",
|
|
1119
|
+
"pressEnterToContinue": "Нажмите Enter для продолжения..."
|
|
1120
1120
|
},
|
|
1121
1121
|
"maintainLanguagePurity": {
|
|
1122
1122
|
"workflow_title": "🚀 Рабочий процесс поддержания чистоты языков",
|
|
@@ -2112,8 +2112,8 @@
|
|
|
2112
2112
|
"sizingCommand": "Оценка команды",
|
|
2113
2113
|
"completeCommand": "Завершение команды",
|
|
2114
2114
|
"summaryCommand": "Сводка команды",
|
|
2115
|
-
|
|
2116
|
-
|
|
2115
|
+
"scannerCommand": "scanner - 🔍 Сканирование проблем i18n",
|
|
2116
|
+
"translateCommand": "translate - Автоперевод (Бета)",
|
|
2117
2117
|
"debugCommand": "Отладка команды"
|
|
2118
2118
|
},
|
|
2119
2119
|
"test_complete_system": {
|
package/ui-locales/zh.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"meta": {
|
|
3
|
-
"version": "3.1.
|
|
3
|
+
"version": "3.1.1",
|
|
4
4
|
"updated": "2026-05-07"
|
|
5
5
|
},
|
|
6
6
|
"common": {
|
|
@@ -1105,18 +1105,18 @@
|
|
|
1105
1105
|
"warningProceedingWithoutFramework": "未检测到 i18n 框架即可继续。"
|
|
1106
1106
|
},
|
|
1107
1107
|
"language": {
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1108
|
+
"title": "🌍 切换语言",
|
|
1109
|
+
"separator": "============================================================",
|
|
1110
|
+
"current": "当前语言:{language}",
|
|
1111
|
+
"available": "可用语言:",
|
|
1112
|
+
"languageOption": "{index}。 {displayName}{current}",
|
|
1113
|
+
"backToMainMenu": "返回主菜单",
|
|
1114
|
+
"prompt": "请选择语言(0-8):",
|
|
1115
|
+
"cancelled": "已取消语言切换。",
|
|
1116
|
+
"invalid": "无效选择,请重试。",
|
|
1117
|
+
"changed": "语言已切换为:{language}",
|
|
1118
|
+
"changeFailed": "切换语言失败:{error}",
|
|
1119
|
+
"pressEnterToContinue": "按 Enter 继续..."
|
|
1120
1120
|
},
|
|
1121
1121
|
"maintainLanguagePurity": {
|
|
1122
1122
|
"workflow_title": "🚀 语言纯洁度维护工作流",
|