i18ntk 4.6.1 → 4.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/README.md +17 -11
  3. package/main/i18ntk-init.js +9 -7
  4. package/main/i18ntk-ui.js +1 -1
  5. package/main/i18ntk-usage.js +2 -2
  6. package/main/i18ntk-validate.js +1 -1
  7. package/main/manage/commands/ValidateCommand.js +1 -1
  8. package/main/manage/index.js +16 -20
  9. package/main/manage/services/ConfigurationService.js +1 -1
  10. package/main/manage/services/FrameworkDetectionService.js +1 -1
  11. package/main/manage/services/UsageService.js +2 -2
  12. package/package.json +12 -9
  13. package/settings/settings-manager.js +19 -3
  14. package/ui-locales/ar.json +2636 -0
  15. package/ui-locales/cs.json +2636 -0
  16. package/ui-locales/de.json +17 -1
  17. package/ui-locales/el.json +2636 -0
  18. package/ui-locales/en.json +17 -1
  19. package/ui-locales/es.json +17 -1
  20. package/ui-locales/fr.json +17 -1
  21. package/ui-locales/he.json +2636 -0
  22. package/ui-locales/hi.json +2636 -0
  23. package/ui-locales/hu.json +2636 -0
  24. package/ui-locales/it.json +2636 -0
  25. package/ui-locales/ja.json +17 -1
  26. package/ui-locales/ko.json +2636 -0
  27. package/ui-locales/nl.json +2636 -0
  28. package/ui-locales/pl.json +2636 -0
  29. package/ui-locales/pt.json +2636 -0
  30. package/ui-locales/ru.json +17 -1
  31. package/ui-locales/sv.json +2636 -0
  32. package/ui-locales/th.json +2636 -0
  33. package/ui-locales/tr.json +2636 -0
  34. package/ui-locales/uk.json +2636 -0
  35. package/ui-locales/vi.json +2636 -0
  36. package/ui-locales/zh.json +17 -1
  37. package/utils/config-helper.js +2 -2
  38. package/utils/config-manager.js +3 -4
  39. package/utils/env-manager.js +1 -1
  40. package/utils/framework-detector.js +252 -65
  41. package/utils/locale-optimizer.js +1 -1
  42. package/utils/report-model.js +16 -5
package/CHANGELOG.md CHANGED
@@ -4,6 +4,50 @@ All notable changes to this project will be documented in this file.
4
4
 
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
 
7
+ ## [4.7.1] - 2026-07-07
8
+
9
+ ### Added
10
+
11
+ - **23 UI locale languages** — Expanded from 7 to 23: Italian, Portuguese, Dutch, Polish, Swedish, Ukrainian, Czech, Turkish, Korean, Arabic, Hindi, Thai, Vietnamese, Hebrew, Greek, Hungarian. All 2,211 keys auto-translated with placeholder preservation via i18ntk's own pipeline. 95-98% translation completeness, 0 missing keys.
12
+ - **Native language names** — `settings.languages.{code}` entries added to all 23 locale files with names in native script (Italiano, 日本語, العربية, हिन्दी, etc.). `getAvailableLanguages()` returns all 23 with display names.
13
+ - **Settings schema expanded** — `language` and `uiLanguage` enum constraints expanded from 7 to 23 entries. Language selector in settings UI and CLI picks up all available languages.
14
+
15
+ ### Changed
16
+
17
+ - **Framework detection centralized** — `manage/index.js` `detectEnvironmentAndFramework()` now calls `detectProjectFramework()` from the centralized detector instead of a 6-framework inline check. Detects all 30+ supported frameworks.
18
+ - **Hardcoded `framework.supported` removed** — Config templates (`config-manager.js`) and runtime config (`.i18ntk-config`) no longer ship a static framework list. Only actually-detected frameworks appear.
19
+ - **`checkI18nDependencies()` expanded** — Framework package lists unified across `manage/index.js`, `i18ntk-manage.js`, `InitService.js`, and `FrameworkDetectionService.js` (8→29 entries each).
20
+ - **Hardcoded 7-language lists expanded to 23** — Updated in 12 production files: `i18n-usage.js`, `i18n-validate.js`, `ValidateCommand.js`, `UsageService.js`, `FrameworkDetectionService.js`, `ConfigurationService.js`, `i18ntk-manage.js`, `locale-optimizer.js` ×2, `env-manager.js`, `i18ntk-ui.js`, `manage/index.js`.
21
+ - **Default config template expanded** — `config-helper.js` `supportedLanguages` and template skeleton files expanded from 8 to 23 languages.
22
+ - **Missing key validator** — Default constructor argument expanded from 7 to 23 languages.
23
+ - **Version bumped to 4.7.1** for language expansion and framework detection cleanup.
24
+
25
+ ### Verified
26
+
27
+ - Language switching tested via `i18n-helper.loadTranslations()` across all 23 locales — all return non-English values.
28
+ - 69 core tests pass, 98 sandbox tests pass.
29
+ - Package JSON manifest sync test passes (version, versionInfo, nextVersion aligned).
30
+ - All 23 locale files have valid JSON syntax.
31
+
32
+ ## [4.7.0] - 2026-07-07
33
+
34
+ ### Added
35
+
36
+ - **13 new FRAMEWORK_PATTERNS:** `i18ntk-runtime` (hooks, `<t>` component), `nuxt` (`$tc()`, `localePath()`), `lingui` (`<Translate>` component), `formatjs` (`<FormattedMessage>`), `ngx-translate` (pipe, service patterns), `next-intl`, `svelte-i18n`, `solid-i18n` (`<Translate>`), `fastapi`, `ruby-on-rails` (`I18n.t/l/translate`), `react-native-localize`, `ionic`. Each has framework-specific scanning regex patterns.
37
+ - **8 missing FRAMEWORK_COMPATIBILITY entries:** `nuxt`, `nuxt-i18n`, `next-intl`, `ngx-translate`, `svelte-i18n`, `solid-i18n`, `expo`, `vanilla` with min versions.
38
+ - **Non-Node project detection:** `detectFramework()` now checks Python (`requirements.txt`, `pyproject.toml`, `setup.py`), Rust (`Cargo.toml`), Go (`go.mod`), Ruby (`Gemfile`) when no `package.json` exists. Detects Django, Flask, FastAPI, Rails, and generic i18n usage.
39
+ - **20+ new WRAPPER_SKIP_PATTERNS:** `I18n.t(`, `I18n.translate(`, `useTranslate(`, `t.get(`, `$tc(`, `translateService.instant(`, `formatMessage(`, `bundle.get_message(`, `i18n.NewMessage(`, `_(`, `fluent!`, `ts!` and more.
40
+ - **Expanded KNOWN_WRAPPERS in Lens scanner:** Added `$_`, `$tc`, `gettext`, `gettext_lazy`, `I18n.t`, `I18n.translate`, `I18n.l`, `I18n.localize`.
41
+ - **Expanded NAMESPACE_HELPERS in both scanners:** Added `useTranslate`, `useSpeak`, `withTranslation`.
42
+ - **Framework-aware report-model.js:** `scanSourceFiles()` accepts optional framework parameter, uses `getFrameworkPatterns()` for framework-specific key extraction.
43
+ - **Expanded CLI init framework list:** `checkI18nDependencies()` now scans 27+ npm package names instead of 7.
44
+ - **Sandbox test suite:** 98 new tests covering framework detection against real package.json, requirements.txt, Cargo.toml, go.mod, Gemfile fixtures. Coverage validation for all FRAMEWORK_PATTERNS, FRAMEWORK_SUGGESTIONS, FRAMEWORK_COMPATIBILITY, WRAPPER_SKIP_PATTERNS, and SCANNER_EXTENSIONS.
45
+
46
+ ### Changed
47
+
48
+ - **Version bumped to 4.7.0** for the comprehensive framework detection expansion.
49
+ - **detectFramework()** no longer returns `null` when only non-Node project files are present. Cascades through 5 detection phases: Node → Python → Rust → Go → Ruby.
50
+
7
51
  ## [4.6.1] - 2026-07-05
8
52
 
9
53
  ### Fixed
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # i18ntk v4.6.1
1
+ # i18ntk v4.7.1
2
2
 
3
3
  A zero-dependency internationalization toolkit for setup, scanning, analysis, validation, usage tracking, translation completion, automatic JSON locale translation, reporting, and runtime translation loading.
4
4
 
@@ -9,7 +9,7 @@ A zero-dependency internationalization toolkit for setup, scanning, analysis, va
9
9
  [![node](https://img.shields.io/badge/node-%3E%3D16-339933)](https://nodejs.org)
10
10
  [![dependencies](https://img.shields.io/badge/dependencies-0-success)](https://www.npmjs.com/package/i18ntk)
11
11
  [![license](https://img.shields.io/badge/license-MIT-yellow.svg)](LICENSE)
12
- [![socket](https://socket.dev/api/badge/npm/package/i18ntk/4.6.1)](https://socket.dev/npm/package/i18ntk/overview/4.6.1)
12
+ [![socket](https://socket.dev/api/badge/npm/package/i18ntk/4.7.1)](https://socket.dev/npm/package/i18ntk/overview/4.7.1)
13
13
 
14
14
  [![i18ntk Workbench](https://img.shields.io/badge/VS_Code-Workbench-007ACC?logo=visualstudiocode&logoColor=white)](https://marketplace.visualstudio.com/items?itemName=VladNoskov.i18ntk-workbench)
15
15
  [![i18ntk Lens](https://img.shields.io/badge/VS_Code-Lens-007ACC?logo=visualstudiocode&logoColor=white)](https://marketplace.visualstudio.com/items?itemName=VladNoskov.i18ntk-lens)
@@ -27,17 +27,23 @@ npm install -g i18ntk
27
27
  npx i18ntk --help
28
28
  ```
29
29
 
30
- ## What's New in 4.6.0
30
+ ## What's New in 4.7.1
31
31
 
32
- - **25+ framework detections** — Rust, Remix, Gatsby, Astro, Qwik, SolidJS, Ember, React Native, Expo, Ionic added. All drawn from a single centralized detector.
33
- - **Rust support** — Cargo.toml detection and `.rs` file scanning with fluent/gettext-rs framework patterns.
34
- - **File extensions** — `.astro`, `.mdx`, `.mjs`, `.mts`, `.cjs`, `.cts`, `.rs` scanned across all tools.
35
- - **ICU/Fluent placeholder support** — Fluent `$variable` and ICU `{var, plural, ...}` patterns detected.
36
- - **JSX component detection** — `<Trans>`, `<FormattedMessage>`, `<Translate>` components recognized.
37
- - **Health score fix** — No more negative or misleadingly low scores.
38
- - **Centralized architecture** — Framework data, extensions, excludes, and patterns live in one module consumed by all tools.
32
+ - **23 UI Languages** — Expanded from 7 to 23: Italian, Portuguese, Dutch, Polish, Swedish, Ukrainian, Czech, Turkish, Korean, Arabic, Hindi, Thai, Vietnamese, Hebrew, Greek, Hungarian. All 2,211 keys auto-translated and verified.
33
+ - **Framework Detection Cleanup** — Removed hardcoded `framework.supported` lists from config templates. `manage/index.js` now uses centralized `detectProjectFramework()` covering all 30+ frameworks. Only detected frameworks appear in setup — no more static catalog.
34
+ - **Language Selector** — Settings UI, `getAvailableLanguages()`, and schema enums all expanded from 7 to 23 languages with native names.
35
+ - **12 Production Files Updated** — Hardcoded 7-language arrays expanded to 23: validators, locale optimizers, env manager, usage tracking, UI, and config helpers.
39
36
 
40
- [Full changelog →](./CHANGELOG.md)
37
+ ## What's New in 4.7.0
38
+
39
+ - **30+ framework detection patterns** — 13 new FRAMEWORK_PATTERNS: `i18ntk-runtime`, `nuxt`, `lingui`, `formatjs`, `ngx-translate`, `next-intl`, `svelte-i18n`, `solid-i18n`, `fastapi`, `ruby-on-rails`, `react-native-localize`, `ionic`. Each with framework-specific scan regexes for translation calls, JSX components, template directives, and pipes.
40
+ - **Non-Node project detection** — Python (`requirements.txt`, `pyproject.toml`, `setup.py`), Rust (`Cargo.toml`), Go (`go.mod`), Ruby (`Gemfile`) now detected when no `package.json` exists. Detects Django, Flask, FastAPI, Rails, and generic i18n.
41
+ - **20+ new WRAPPER_SKIP_PATTERNS** — Covers I18n.t(), useTranslate(), translateService.instant(), formatMessage(), bundle.get_message(), fluent!, ts! and more.
42
+ - **Framework-aware report generation** — `report-model.js` accepts optional framework parameter and uses framework-specific patterns for key extraction.
43
+ - **Expanded namespace helpers** — `useTranslate` (Qwik), `useSpeak` (Qwik), `withTranslation` (react-i18next) added.
44
+ - **Attribute key detection** — `i18nKey=`, `t-key=`, `data-i18n=` attributes detected in source scanning.
45
+ - **All frame works now have FRAMEWORK_COMPATIBILITY entries and FRAMEWORK_SUGGESTIONS** for consistent tooling.
46
+ [Full changelog →](./CHANGELOG.md)
41
47
 
42
48
  ## Quick Start
43
49
 
@@ -138,13 +138,15 @@ class I18nInitializer {
138
138
  };
139
139
 
140
140
  const i18nFrameworks = [
141
- 'react-i18next',
142
- 'vue-i18n',
143
- 'angular-i18n',
144
- 'i18next',
145
- 'next-i18next',
146
- 'svelte-i18n',
147
- '@nuxtjs/i18n'
141
+ 'react-i18next', 'vue-i18n', 'i18next', 'next-i18next',
142
+ 'svelte-i18n', '@nuxtjs/i18n', 'next-intl', 'remix-i18next',
143
+ 'i18next-remix', 'gatsby-plugin-react-i18next', 'gatsby-plugin-intl',
144
+ 'sveltekit-i18n', 'astro-i18next', '@astrojs/i18n',
145
+ 'qwik-speak', 'qwik-i18n', '@solid-primitives/i18n',
146
+ 'ember-intl', 'react-native-localize', 'expo-localization',
147
+ '@ngx-translate/core', '@ionic/angular',
148
+ 'formatjs', '@lingui/core', 'i18ntk-runtime', 'i18ntk/runtime',
149
+ 'angular-i18n', '@angular/localize'
148
150
  ];
149
151
 
150
152
  const installedFrameworks = i18nFrameworks.filter(framework => dependencies[framework]);
package/main/i18ntk-ui.js CHANGED
@@ -100,7 +100,7 @@ this.translations = {};
100
100
  * @returns {string[]} Array of available language codes
101
101
  */
102
102
  detectAvailableLanguages() {
103
- const all = ['en', 'de', 'es', 'fr', 'ru', 'ja', 'zh'];
103
+ const all = ['en', 'de', 'es', 'fr', 'it', 'pt', 'nl', 'pl', 'sv', 'uk', 'cs', 'tr', 'ru', 'ja', 'ko', 'zh', 'ar', 'hi', 'th', 'vi', 'he', 'el', 'hu'];
104
104
  return all.filter(lang => {
105
105
  const filePath = path.join(this.uiLocalesDir, `${lang}.json`);
106
106
  return SecurityUtils.safeExistsSync(filePath, this.getValidationBase(filePath));
@@ -1208,7 +1208,7 @@ Analysis Features (v1.10.1):
1208
1208
  });
1209
1209
 
1210
1210
  for (const lang of allLanguageDirs) {
1211
- if (['en', 'de', 'es', 'fr', 'ru', 'ja', 'zh'].includes(lang)) {
1211
+ if (['en', 'de', 'es', 'fr', 'it', 'pt', 'nl', 'pl', 'sv', 'uk', 'cs', 'tr', 'ru', 'ja', 'ko', 'zh', 'ar', 'hi', 'th', 'vi', 'he', 'el', 'hu'].includes(lang)) {
1212
1212
  languages.add(lang);
1213
1213
  }
1214
1214
  }
@@ -1217,7 +1217,7 @@ Analysis Features (v1.10.1):
1217
1217
  const directFiles = fs.readdirSync(this.i18nDir)
1218
1218
  .filter(file => file.endsWith('.json'))
1219
1219
  .map(file => path.basename(file, '.json'))
1220
- .filter(lang => ['en', 'de', 'es', 'fr', 'ru', 'ja', 'zh'].includes(lang));
1220
+ .filter(lang => ['en', 'de', 'es', 'fr', 'it', 'pt', 'nl', 'pl', 'sv', 'uk', 'cs', 'tr', 'ru', 'ja', 'ko', 'zh', 'ar', 'hi', 'th', 'vi', 'he', 'el', 'hu'].includes(lang));
1221
1221
 
1222
1222
  directFiles.forEach(lang => languages.add(lang));
1223
1223
  } catch (error) {
@@ -186,7 +186,7 @@ class I18nValidator {
186
186
  baseArgs.enforceKeyStyle = val === undefined ? true : val !== 'false';
187
187
  } else if (sanitizedArg.startsWith('--') && !sanitizedArg.includes('=')) {
188
188
  const key = sanitizedArg.substring(2);
189
- if (['en', 'de', 'es', 'fr', 'ru', 'ja', 'zh'].includes(key)) {
189
+ if (['en', 'de', 'es', 'fr', 'it', 'pt', 'nl', 'pl', 'sv', 'uk', 'cs', 'tr', 'ru', 'ja', 'ko', 'zh', 'ar', 'hi', 'th', 'vi', 'he', 'el', 'hu'].includes(key)) {
190
190
  baseArgs.uiLanguage = key;
191
191
  }
192
192
  }
@@ -163,7 +163,7 @@ class ValidateCommand {
163
163
  const sanitizedArg = SecurityUtils.sanitizeInput(arg);
164
164
  if (sanitizedArg.startsWith('--') && !sanitizedArg.includes('=')) {
165
165
  const key = sanitizedArg.substring(2);
166
- if (['en', 'de', 'es', 'fr', 'ru', 'ja', 'zh'].includes(key)) {
166
+ if (['en', 'de', 'es', 'fr', 'it', 'pt', 'nl', 'pl', 'sv', 'uk', 'cs', 'tr', 'ru', 'ja', 'ko', 'zh', 'ar', 'hi', 'th', 'vi', 'he', 'el', 'hu'].includes(key)) {
167
167
  baseArgs.uiLanguage = key;
168
168
  }
169
169
  }
@@ -29,9 +29,10 @@ const { blue } = require('../../utils/colors-new');
29
29
  const { loadConfig, saveConfig, ensureConfigDefaults } = require('../../utils/config');
30
30
  const { buildMainMenuLines } = require('../../utils/menu-layout');
31
31
  const SettingsCLI = require('../../settings/settings-cli');
32
- const pkg = require('../../package.json');
32
+ const pkg = require('../../package.json');
33
33
  const SetupEnforcer = require('../../utils/setup-enforcer');
34
34
  const CommandRouter = require('./commands/CommandRouter');
35
+ const { detectProjectFramework } = require('../../utils/framework-detector');
35
36
 
36
37
  // Import services to replace circular dependencies
37
38
  const ConfigurationService = require('./services/ConfigurationService');
@@ -142,7 +143,7 @@ class I18nManager {
142
143
  const hasLanguageDirs = items.some(item => {
143
144
  const itemPath = path.join(resolvedPath, item);
144
145
  return fs.statSync(itemPath).isDirectory() &&
145
- ['en', 'de', 'es', 'fr', 'ru', 'ja', 'zh'].includes(item);
146
+ ['en', 'de', 'es', 'fr', 'it', 'pt', 'nl', 'pl', 'sv', 'uk', 'cs', 'tr', 'ru', 'ja', 'ko', 'zh', 'ar', 'hi', 'th', 'vi', 'he', 'el', 'hu'].includes(item);
146
147
  });
147
148
 
148
149
  if (hasLanguageDirs) {
@@ -201,15 +202,15 @@ class I18nManager {
201
202
  };
202
203
 
203
204
  const i18nFrameworks = [
204
- 'react-i18next',
205
- 'vue-i18n',
206
- 'angular-i18n',
207
- 'i18next',
208
- 'next-i18next',
209
- 'svelte-i18n',
210
- '@nuxtjs/i18n',
211
- 'i18ntk-runtime',
212
- 'i18ntk'
205
+ 'react-i18next', 'vue-i18n', 'i18next', 'next-i18next',
206
+ 'svelte-i18n', '@nuxtjs/i18n', 'next-intl', 'remix-i18next',
207
+ 'i18next-remix', 'gatsby-plugin-react-i18next', 'gatsby-plugin-intl',
208
+ 'sveltekit-i18n', 'astro-i18next', '@astrojs/i18n',
209
+ 'qwik-speak', 'qwik-i18n', '@solid-primitives/i18n',
210
+ 'ember-intl', 'react-native-localize', 'expo-localization',
211
+ '@ngx-translate/core', '@ionic/angular',
212
+ 'formatjs', '@lingui/core', 'i18ntk-runtime', 'i18ntk/runtime',
213
+ 'angular-i18n', '@angular/localize', 'i18ntk'
213
214
  ];
214
215
 
215
216
  const installedFrameworks = i18nFrameworks.filter(framework => dependencies[framework]);
@@ -292,7 +293,7 @@ class I18nManager {
292
293
  break;
293
294
  default:
294
295
  // Handle language shorthand flags like --de, --fr
295
- if (['en', 'de', 'es', 'fr', 'ru', 'ja', 'zh'].includes(sanitizedKey)) {
296
+ if (['en', 'de', 'es', 'fr', 'it', 'pt', 'nl', 'pl', 'sv', 'uk', 'cs', 'tr', 'ru', 'ja', 'ko', 'zh', 'ar', 'hi', 'th', 'vi', 'he', 'el', 'hu'].includes(sanitizedKey)) {
296
297
  parsed.uiLanguage = sanitizedKey;
297
298
  }
298
299
  break;
@@ -690,15 +691,10 @@ class I18nManager {
690
691
  detectedFramework = 'i18ntk-runtime';
691
692
  }
692
693
 
693
- // Only check other frameworks if i18ntk-runtime wasn't detected
694
+ // Use centralized framework detector
694
695
  if (detectedFramework !== 'i18ntk-runtime') {
695
- if (deps.react || deps['react-dom']) detectedFramework = 'react';
696
- else if (deps.vue || deps['vue-router']) detectedFramework = 'vue';
697
- else if (deps['@angular/core']) detectedFramework = 'angular';
698
- else if (deps.next) detectedFramework = 'nextjs';
699
- else if (deps.nuxt) detectedFramework = 'nuxt';
700
- else if (deps.svelte) detectedFramework = 'svelte';
701
- else detectedFramework = 'generic';
696
+ const centralDetected = detectProjectFramework(process.cwd());
697
+ detectedFramework = (centralDetected && centralDetected !== 'vanilla') ? centralDetected : 'generic';
702
698
  }
703
699
  } catch (error) {
704
700
  detectedFramework = 'generic';
@@ -311,7 +311,7 @@ module.exports = class ConfigurationService {
311
311
  break;
312
312
  default:
313
313
  // Handle language shorthand flags like --de, --fr
314
- if (['en', 'de', 'es', 'fr', 'ru', 'ja', 'zh'].includes(sanitizedKey)) {
314
+ if (['en', 'de', 'es', 'fr', 'it', 'pt', 'nl', 'pl', 'sv', 'uk', 'cs', 'tr', 'ru', 'ja', 'ko', 'zh', 'ar', 'hi', 'th', 'vi', 'he', 'el', 'hu'].includes(sanitizedKey)) {
315
315
  parsed.uiLanguage = sanitizedKey;
316
316
  }
317
317
  break;
@@ -330,7 +330,7 @@ module.exports = class FrameworkDetectionService {
330
330
  const hasLanguageDirs = items.some(item => {
331
331
  const itemPath = path.join(resolvedPath, item);
332
332
  return fs.statSync(itemPath).isDirectory() &&
333
- ['en', 'de', 'es', 'fr', 'ru', 'ja', 'zh'].includes(item);
333
+ ['en', 'de', 'es', 'fr', 'it', 'pt', 'nl', 'pl', 'sv', 'uk', 'cs', 'tr', 'ru', 'ja', 'ko', 'zh', 'ar', 'hi', 'th', 'vi', 'he', 'el', 'hu'].includes(item);
334
334
  });
335
335
 
336
336
  if (hasLanguageDirs) {
@@ -674,7 +674,7 @@ class UsageService {
674
674
  });
675
675
 
676
676
  for (const lang of allLanguageDirs) {
677
- if (['en', 'de', 'es', 'fr', 'ru', 'ja', 'zh'].includes(lang)) {
677
+ if (['en', 'de', 'es', 'fr', 'it', 'pt', 'nl', 'pl', 'sv', 'uk', 'cs', 'tr', 'ru', 'ja', 'ko', 'zh', 'ar', 'hi', 'th', 'vi', 'he', 'el', 'hu'].includes(lang)) {
678
678
  languages.add(lang);
679
679
  }
680
680
  }
@@ -683,7 +683,7 @@ class UsageService {
683
683
  const directFiles = fs.readdirSync(this.i18nDir)
684
684
  .filter(file => file.endsWith('.json'))
685
685
  .map(file => path.basename(file, '.json'))
686
- .filter(lang => ['en', 'de', 'es', 'fr', 'ru', 'ja', 'zh'].includes(lang));
686
+ .filter(lang => ['en', 'de', 'es', 'fr', 'it', 'pt', 'nl', 'pl', 'sv', 'uk', 'cs', 'tr', 'ru', 'ja', 'ko', 'zh', 'ar', 'hi', 'th', 'vi', 'he', 'el', 'hu'].includes(lang));
687
687
 
688
688
  directFiles.forEach(lang => languages.add(lang));
689
689
  } catch (error) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "i18ntk",
3
- "version": "4.6.1",
3
+ "version": "4.7.1",
4
4
  "description": "i18n Tool Kit - Zero-dependency internationalization toolkit for setup, scanning, analysis, validation, auto translation, fixing, reporting, and runtime translation loading.",
5
5
  "readmeFilename": "README.md",
6
6
  "keywords": [
@@ -179,9 +179,9 @@
179
179
  },
180
180
  "preferGlobal": true,
181
181
  "versionInfo": {
182
- "version": "4.6.1",
183
- "releaseDate": "07/04/2026",
184
- "lastUpdated": "07/05/2026",
182
+ "version": "4.7.1",
183
+ "releaseDate": "07/07/2026",
184
+ "lastUpdated": "07/07/2026",
185
185
  "maintainer": "Vlad Noskov",
186
186
  "changelog": "./CHANGELOG.md",
187
187
  "documentation": "./README.md",
@@ -196,10 +196,13 @@
196
196
  "FILE EXTENSIONS: Added .astro, .mdx, .mjs, .mts, .cjs, .cts, .rs to all file scan lists via centralized SOURCE_EXTENSIONS and SCANNER_EXTENSIONS.",
197
197
  "ICU/FLUENT PLACEHOLDER SUPPORT: Fluent $variable and ICU MessageFormat patterns added to placeholder detection and comparison.",
198
198
  "JSX COMPONENT DETECTION: <Trans>, <FormattedMessage>, <Translate> JSX components detected in both VS Code extensions.",
199
- "COMPREHENSIVE TESTING: All 384+ tests pass across CLI, Workbench, and Lens packages."
199
+ "COMPREHENSIVE TESTING: All 384+ tests pass across CLI, Workbench, and Lens packages.",
200
+ "FRAMEWORK DETECTION v2: Added 13 additional FRAMEWORK_PATTERNS (i18ntk-runtime, nuxt, formatjs, lingui, ngx-translate, next-intl, svelte-i18n, solid-i18n, fastapi, ruby-on-rails, react-native-localize, ionic). Expanded detectFramework() to check Python/Rust/Go/Ruby project files. Added 20+ WRAPPER_SKIP_PATTERNS. Added 8 missing FRAMEWORK_COMPATIBILITY versions. Now supports 30+ frameworks across 15+ languages.",
201
+ "UI LOCALE EXPANSION: Expanded from 7 to 23 languages (Italian, Portuguese, Dutch, Polish, Swedish, Ukrainian, Czech, Turkish, Korean, Arabic, Hindi, Thai, Vietnamese, Hebrew, Greek, Hungarian). All 2,211 keys auto-translated with placeholder preservation. Native language names in all locale files. getAvailableLanguages(), settings schema enums, and UI language picker expanded to 23. 95-98% translated per language, 0 missing keys.",
202
+ "FRAMEWORK DETECTION CLEANUP: manage/index.js now uses centralized detectProjectFramework() instead of 6-framework inline check. Removed hardcoded framework.supported from config templates — only detected frameworks appear. checkI18nDependencies() unified across 4 modules (8→29 entries). 12 production files updated — hardcoded 7-language arrays expanded to 23."
200
203
  ],
201
204
  "breakingChanges": [],
202
- "nextVersion": "4.6.2",
205
+ "nextVersion": "4.7.2",
203
206
  "supportedNodeVersions": ">=16.0.0",
204
207
  "supportedFrameworks": {
205
208
  "react-i18next": ">=11.0.0",
@@ -228,18 +231,18 @@
228
231
  "fluent-rs": ">=0.16.0",
229
232
  "gettext-rs": ">=0.7.0"
230
233
  },
231
- "supportPolicy": "Versions earlier than 4.6.1 may be unstable or insecure in CI automation. Upgrade to 4.6.1 or newer.",
234
+ "supportPolicy": "Versions earlier than 4.7.0 may be unstable or insecure in CI automation. Upgrade to 4.7.1 or newer.",
232
235
  "deprecations": [
233
236
  "4.3.0",
234
237
  "4.3.1",
235
238
  "4.3.2",
236
239
  "4.3.3"
237
240
  ],
238
- "deprecationMessage": "i18ntk 4.3.x and earlier have known security vulnerabilities (path traversal, JSON DoS). Upgrade to i18ntk@4.6.1 or newer: npm install -g i18ntk@latest",
241
+ "deprecationMessage": "i18ntk 4.3.x and earlier have known security vulnerabilities (path traversal, JSON DoS). Upgrade to i18ntk@4.7.1 or newer: npm install -g i18ntk@latest",
239
242
  "securityAdvisories": [
240
243
  "GHSA-i18ntk-4.3.x-path-traversal: Backup command accepted arbitrary paths without validation (fixed in 4.4.1)",
241
244
  "GHSA-i18ntk-4.3.x-json-dos: Deeply nested JSON files could cause denial of service (fixed in 4.4.1)"
242
245
  ]
243
246
  },
244
- "readme": "# i18ntk v4.6.1\n\nA zero-dependency internationalization toolkit for setup, scanning, analysis, validation, usage tracking, translation completion, automatic JSON locale translation, reporting, and runtime translation loading.\n\n![i18ntk Logo](https://raw.githubusercontent.com/vladnoskv/i18ntk/main/docs/screenshots/i18ntk-logo-public.PNG)\n\n[![npm version](https://img.shields.io/npm/v/i18ntk.svg?color=brightgreen)](https://www.npmjs.com/package/i18ntk)\n[![npm downloads](https://img.shields.io/npm/dt/i18ntk.svg)](https://www.npmjs.com/package/i18ntk)\n[![node](https://img.shields.io/badge/node-%3E%3D16-339933)](https://nodejs.org)\n[![dependencies](https://img.shields.io/badge/dependencies-0-success)](https://www.npmjs.com/package/i18ntk)\n[![license](https://img.shields.io/badge/license-MIT-yellow.svg)](LICENSE)\n[![socket](https://socket.dev/api/badge/npm/package/i18ntk/4.6.1)](https://socket.dev/npm/package/i18ntk/overview/4.6.1)\n\n[![i18ntk Workbench](https://img.shields.io/badge/VS_Code-Workbench-007ACC?logo=visualstudiocode&logoColor=white)](https://marketplace.visualstudio.com/items?itemName=VladNoskov.i18ntk-workbench)\n[![i18ntk Lens](https://img.shields.io/badge/VS_Code-Lens-007ACC?logo=visualstudiocode&logoColor=white)](https://marketplace.visualstudio.com/items?itemName=VladNoskov.i18ntk-lens)\n\n## Ecosystem\n\n- **i18ntk** — CLI toolkit and runtime (this package)\n- **i18ntk Workbench** — VS Code dashboard, reports, and key management\n- **i18ntk Lens** — inline hovers, CodeLens, and diagnostics\n\n## Install\n\n```bash\nnpm install -g i18ntk\nnpx i18ntk --help\n```\n\n## What's New in 4.6.0\n\n- **25+ framework detections** — Rust, Remix, Gatsby, Astro, Qwik, SolidJS, Ember, React Native, Expo, Ionic added. All drawn from a single centralized detector.\n- **Rust support** — Cargo.toml detection and `.rs` file scanning with fluent/gettext-rs framework patterns.\n- **File extensions** — `.astro`, `.mdx`, `.mjs`, `.mts`, `.cjs`, `.cts`, `.rs` scanned across all tools.\n- **ICU/Fluent placeholder support** — Fluent `$variable` and ICU `{var, plural, ...}` patterns detected.\n- **JSX component detection** — `<Trans>`, `<FormattedMessage>`, `<Translate>` components recognized.\n- **Health score fix** — No more negative or misleadingly low scores.\n- **Centralized architecture** — Framework data, extensions, excludes, and patterns live in one module consumed by all tools.\n\n[Full changelog →](./CHANGELOG.md)\n\n## Quick Start\n\n```bash\ni18ntk # interactive menu\ni18ntk --command=analyze # coverage report\ni18ntk --command=validate # quality checks\ni18ntk --command=usage # key usage tracking\ni18ntk report --json --out ./reports # full report\ni18ntk --command=complete # fill missing keys\ni18ntk --command=translate # auto-translate\ni18ntk --command=summary # status overview\n```\n\nSee [docs/getting-started.md](./docs/getting-started.md) for the full onboarding guide.\n\n## Command Reference\n\n| Command | Purpose | Output |\n| ----------- | ------------------------------------------ | ----------------------------- |\n| `i18ntk` | Interactive management menu | — |\n| `init` | Setup locale folders and target files | Locale JSON, `.i18ntk-config` |\n| `analyze` | Translation coverage comparison | Reports |\n| `validate` | Structure, quality, and risk validation | Summary report |\n| `usage` | Map keys to source, find dead/missing keys | Usage report |\n| `report` | Stable schema report (JSON/MD/HTML) | stdout or file output |\n| `scanner` | Detect hardcoded text in source files | Scanner report |\n| `complete` | Fill missing keys in target files | Target locale JSON |\n| `translate` | Auto-translate via provider AI | Target locale JSON |\n| `sizing` | Expansion risk and layout analysis | Sizing report |\n| `summary` | Project translation status overview | Console output |\n| `fixer` | Fix placeholders and markers | Locale JSON |\n| `backup` | Create/verify/restore locale backups | Backup archives |\n\nEach is available as `i18ntk --command=<name>` or standalone `i18ntk-<name>`.\n\n## Common Options\n\n```\n--code-dir <path> Source code directory\n--locales-dir <path> Locale files directory\n--output-dir <path> Report output directory\n--source-locale <code> Source language code (e.g. en)\n--framework <name> Override framework detection\n--no-prompt Skip interactive prompts\n--help Show help\n```\n\n## Auto Translate\n\n```bash\ni18ntk-translate locales/en/common.json de\ni18ntk-translate locales/en/common.json fr --dry-run --preserve-placeholders\n```\n\n**Providers:** Google (default), DeepL, LibreTranslate\n\n```bash\nexport DEEPL_API_KEY=\"your-key\"\ni18ntk-translate locales/en/common.json de --provider deepl --no-confirm\n```\n\n**Placeholder-aware translation** detects `{name}`, `{{count}}`, `%s`, `:id`, `${value}`, `$t(key)`, and ICU pattern syntax. The default mode is `--only-missing` — existing translations are preserved.\n\nProtected terms and keys via `i18ntk-auto-translate.json`:\n\n```json\n{\n \"version\": 1,\n \"terms\": [\"BrandName\", \"PRODUCT_CODE\"],\n \"keys\": [\"app.brandName\", \"product.*.symbol\"],\n \"values\": [\"BrandName Ltd\"],\n \"patterns\": [\"[A-Z]{2,}-\\\\d+\"]\n}\n```\n\n[Auto Translate guide →](./docs/auto-translate.md)\n\n## Configuration\n\nExample `.i18ntk-config`:\n\n```json\n{\n \"version\": \"4.6.1\",\n \"sourceDir\": \"./locales\",\n \"i18nDir\": \"./locales\",\n \"sourceLanguage\": \"en\",\n \"defaultLanguages\": [\"en\", \"de\", \"es\", \"fr\", \"ru\"],\n \"keyStyle\": \"dot.notation\",\n \"englishContentThresholdPercent\": 10,\n \"allowedEnglishTerms\": [\"BrandName\"],\n \"autoTranslate\": {\n \"placeholderMode\": \"preserve\",\n \"concurrency\": 12,\n \"onlyMissingOrEnglish\": true\n },\n \"extensions\": {\n \"workbench\": { \"localeDirectory\": \"./locales\", \"sourceLocale\": \"en\" },\n \"lens\": { \"localeDirectory\": \"./locales\", \"sourceLocale\": \"en\", \"keyFormats\": [\"dot\", \"snake\"] }\n }\n}\n```\n\n[Configuration reference →](./docs/api/CONFIGURATION.md)\n\n## Scanner\n\nDetects hardcoded text in 12+ languages with language-specific character ranges and stopword filtering. Framework-specific patterns for React, Vue, Angular, Svelte, Astro, Django, Flask, Python, Rust, Go, and more.\n\n```bash\ni18ntk-scanner --code-dir ./src --source-locale de\ni18ntk-scanner --code-dir ./src --source-locale ja --output-report\n```\n\n## Usage Analysis\n\nTracks key references, detects dead keys with confidence scores, resolves dynamic patterns (templates, arrays, object maps), and recommends namespace alignment.\n\n```bash\ni18ntk-usage --code-dir ./src --locales-dir ./locales --cleanup --dry-run-delete\n```\n\n## Runtime\n\n```js\nconst runtime = require('i18ntk/runtime');\nconst i18n = runtime.initRuntime({\n baseDir: './locales',\n language: 'en',\n fallbackLanguage: 'en',\n});\n\nconsole.log(i18n.t('common.hello'));\ni18n.setLanguage('fr');\nconsole.log(i18n.getAvailableLanguages());\n```\n\n**Lazy loading** reduces memory on large locale folders:\n\n```js\nconst i18n = runtime.initRuntime({ baseDir: './locales', language: 'en', lazy: true });\n```\n\n**Per-call language overrides:**\n\n```js\ni18n.t('common.hello', {}, { language: 'de' });\n```\n\n**Batch translation:**\n\n```js\ni18n.translateBatch(['menu.home', 'menu.settings']);\n```\n\nProduction guidance:\n\n- Use the instance from `initRuntime()` — not module-level `runtime.t()` — in multi-tenant apps\n- Use `lazy: true` for large folders; `preload: true` for small sets\n- Call `refresh(language)` after deploying changed locale files\n- `i18ntk/runtime/enhanced` remains available for async/encryption compatibility\n\n[Runtime guide →](./docs/runtime.md)\n\n## Watch\n\n```js\nconst watchLocales = require('i18ntk/utils/watch-locales');\nconst watcher = watchLocales('./locales');\n\nwatcher.on('change', (filePath) => console.log('changed:', filePath));\nwatcher.on('add', (filePath) => console.log('added:', filePath));\nwatcher.stop();\n```\n\nFeatures: 300ms debounce, SHA-256 hash tracking, 50-directory cap. The callback form `watchLocales('./locales', onChange)` is still supported.\n\n## Documentation\n\n- [Getting Started](./docs/getting-started.md)\n- [Configuration](./docs/api/CONFIGURATION.md)\n- [API Reference](./docs/api/API_REFERENCE.md)\n- [Runtime API](./docs/runtime.md)\n- [Auto Translate](./docs/auto-translate.md)\n- [Scanner Guide](./docs/scanner-guide.md)\n- [Environment Variables](./docs/environment-variables.md)\n\n## Security\n\n- No API key required for default Auto Translate\n- Do not store secrets in locale files, `.i18ntk-config`, or protection files\n- Report issues via [SECURITY.md](./SECURITY.md)\n\n## Related\n\n| Tool | Purpose |\n| ---------------- | ------------------------------------------- |\n| i18ntk Workbench | VS Code localization health dashboard |\n| i18ntk Lens | Inline hovers, CodeLens, and diagnostics |\n| PublishGuard | Pre-publish safety scanner for npm packages |\n| ContextKit | AI coding context manager |\n\n## License\n\nSee [LICENSE](./LICENSE).\n"
247
+ "readme": "# i18ntk v4.7.1\n\nA zero-dependency internationalization toolkit for setup, scanning, analysis, validation, usage tracking, translation completion, automatic JSON locale translation, reporting, and runtime translation loading.\n\n![i18ntk Logo](https://raw.githubusercontent.com/vladnoskv/i18ntk/main/docs/screenshots/i18ntk-logo-public.PNG)\n\n[![npm version](https://img.shields.io/npm/v/i18ntk.svg?color=brightgreen)](https://www.npmjs.com/package/i18ntk)\n[![npm downloads](https://img.shields.io/npm/dt/i18ntk.svg)](https://www.npmjs.com/package/i18ntk)\n[![node](https://img.shields.io/badge/node-%3E%3D16-339933)](https://nodejs.org)\n[![dependencies](https://img.shields.io/badge/dependencies-0-success)](https://www.npmjs.com/package/i18ntk)\n[![license](https://img.shields.io/badge/license-MIT-yellow.svg)](LICENSE)\n[![socket](https://socket.dev/api/badge/npm/package/i18ntk/4.7.1)](https://socket.dev/npm/package/i18ntk/overview/4.7.1)\n\n[![i18ntk Workbench](https://img.shields.io/badge/VS_Code-Workbench-007ACC?logo=visualstudiocode&logoColor=white)](https://marketplace.visualstudio.com/items?itemName=VladNoskov.i18ntk-workbench)\n[![i18ntk Lens](https://img.shields.io/badge/VS_Code-Lens-007ACC?logo=visualstudiocode&logoColor=white)](https://marketplace.visualstudio.com/items?itemName=VladNoskov.i18ntk-lens)\n\n## Ecosystem\n\n- **i18ntk** — CLI toolkit and runtime (this package)\n- **i18ntk Workbench** — VS Code dashboard, reports, and key management\n- **i18ntk Lens** — inline hovers, CodeLens, and diagnostics\n\n## Install\n\n```bash\nnpm install -g i18ntk\nnpx i18ntk --help\n```\n\n## What's New in 4.7.1\n\n- **23 UI Languages** — Expanded from 7 to 23: Italian, Portuguese, Dutch, Polish, Swedish, Ukrainian, Czech, Turkish, Korean, Arabic, Hindi, Thai, Vietnamese, Hebrew, Greek, Hungarian. All 2,211 keys auto-translated and verified.\n- **Framework Detection Cleanup** — Removed hardcoded `framework.supported` lists from config templates. `manage/index.js` now uses centralized `detectProjectFramework()` covering all 30+ frameworks. Only detected frameworks appear in setup — no more static catalog.\n- **Language Selector** — Settings UI, `getAvailableLanguages()`, and schema enums all expanded from 7 to 23 languages with native names.\n- **12 Production Files Updated** — Hardcoded 7-language arrays expanded to 23: validators, locale optimizers, env manager, usage tracking, UI, and config helpers.\n\n## What's New in 4.7.0\n\n- **30+ framework detection patterns** — 13 new FRAMEWORK_PATTERNS: `i18ntk-runtime`, `nuxt`, `lingui`, `formatjs`, `ngx-translate`, `next-intl`, `svelte-i18n`, `solid-i18n`, `fastapi`, `ruby-on-rails`, `react-native-localize`, `ionic`. Each with framework-specific scan regexes for translation calls, JSX components, template directives, and pipes.\n- **Non-Node project detection** — Python (`requirements.txt`, `pyproject.toml`, `setup.py`), Rust (`Cargo.toml`), Go (`go.mod`), Ruby (`Gemfile`) now detected when no `package.json` exists. Detects Django, Flask, FastAPI, Rails, and generic i18n.\n- **20+ new WRAPPER_SKIP_PATTERNS** — Covers I18n.t(), useTranslate(), translateService.instant(), formatMessage(), bundle.get_message(), fluent!, ts! and more.\n- **Framework-aware report generation** — `report-model.js` accepts optional framework parameter and uses framework-specific patterns for key extraction.\n- **Expanded namespace helpers** — `useTranslate` (Qwik), `useSpeak` (Qwik), `withTranslation` (react-i18next) added.\n- **Attribute key detection** — `i18nKey=`, `t-key=`, `data-i18n=` attributes detected in source scanning.\n- **All frame works now have FRAMEWORK_COMPATIBILITY entries and FRAMEWORK_SUGGESTIONS** for consistent tooling.\n [Full changelog →](./CHANGELOG.md)\n\n## Quick Start\n\n```bash\ni18ntk # interactive menu\ni18ntk --command=analyze # coverage report\ni18ntk --command=validate # quality checks\ni18ntk --command=usage # key usage tracking\ni18ntk report --json --out ./reports # full report\ni18ntk --command=complete # fill missing keys\ni18ntk --command=translate # auto-translate\ni18ntk --command=summary # status overview\n```\n\nSee [docs/getting-started.md](./docs/getting-started.md) for the full onboarding guide.\n\n## Command Reference\n\n| Command | Purpose | Output |\n| ----------- | ------------------------------------------ | ----------------------------- |\n| `i18ntk` | Interactive management menu | — |\n| `init` | Setup locale folders and target files | Locale JSON, `.i18ntk-config` |\n| `analyze` | Translation coverage comparison | Reports |\n| `validate` | Structure, quality, and risk validation | Summary report |\n| `usage` | Map keys to source, find dead/missing keys | Usage report |\n| `report` | Stable schema report (JSON/MD/HTML) | stdout or file output |\n| `scanner` | Detect hardcoded text in source files | Scanner report |\n| `complete` | Fill missing keys in target files | Target locale JSON |\n| `translate` | Auto-translate via provider AI | Target locale JSON |\n| `sizing` | Expansion risk and layout analysis | Sizing report |\n| `summary` | Project translation status overview | Console output |\n| `fixer` | Fix placeholders and markers | Locale JSON |\n| `backup` | Create/verify/restore locale backups | Backup archives |\n\nEach is available as `i18ntk --command=<name>` or standalone `i18ntk-<name>`.\n\n## Common Options\n\n```\n--code-dir <path> Source code directory\n--locales-dir <path> Locale files directory\n--output-dir <path> Report output directory\n--source-locale <code> Source language code (e.g. en)\n--framework <name> Override framework detection\n--no-prompt Skip interactive prompts\n--help Show help\n```\n\n## Auto Translate\n\n```bash\ni18ntk-translate locales/en/common.json de\ni18ntk-translate locales/en/common.json fr --dry-run --preserve-placeholders\n```\n\n**Providers:** Google (default), DeepL, LibreTranslate\n\n```bash\nexport DEEPL_API_KEY=\"your-key\"\ni18ntk-translate locales/en/common.json de --provider deepl --no-confirm\n```\n\n**Placeholder-aware translation** detects `{name}`, `{{count}}`, `%s`, `:id`, `${value}`, `$t(key)`, and ICU pattern syntax. The default mode is `--only-missing` — existing translations are preserved.\n\nProtected terms and keys via `i18ntk-auto-translate.json`:\n\n```json\n{\n \"version\": 1,\n \"terms\": [\"BrandName\", \"PRODUCT_CODE\"],\n \"keys\": [\"app.brandName\", \"product.*.symbol\"],\n \"values\": [\"BrandName Ltd\"],\n \"patterns\": [\"[A-Z]{2,}-\\\\d+\"]\n}\n```\n\n[Auto Translate guide →](./docs/auto-translate.md)\n\n## Configuration\n\nExample `.i18ntk-config`:\n\n```json\n{\n \"version\": \"4.6.1\",\n \"sourceDir\": \"./locales\",\n \"i18nDir\": \"./locales\",\n \"sourceLanguage\": \"en\",\n \"defaultLanguages\": [\"en\", \"de\", \"es\", \"fr\", \"ru\"],\n \"keyStyle\": \"dot.notation\",\n \"englishContentThresholdPercent\": 10,\n \"allowedEnglishTerms\": [\"BrandName\"],\n \"autoTranslate\": {\n \"placeholderMode\": \"preserve\",\n \"concurrency\": 12,\n \"onlyMissingOrEnglish\": true\n },\n \"extensions\": {\n \"workbench\": { \"localeDirectory\": \"./locales\", \"sourceLocale\": \"en\" },\n \"lens\": { \"localeDirectory\": \"./locales\", \"sourceLocale\": \"en\", \"keyFormats\": [\"dot\", \"snake\"] }\n }\n}\n```\n\n[Configuration reference →](./docs/api/CONFIGURATION.md)\n\n## Scanner\n\nDetects hardcoded text in 12+ languages with language-specific character ranges and stopword filtering. Framework-specific patterns for React, Vue, Angular, Svelte, Astro, Django, Flask, Python, Rust, Go, and more.\n\n```bash\ni18ntk-scanner --code-dir ./src --source-locale de\ni18ntk-scanner --code-dir ./src --source-locale ja --output-report\n```\n\n## Usage Analysis\n\nTracks key references, detects dead keys with confidence scores, resolves dynamic patterns (templates, arrays, object maps), and recommends namespace alignment.\n\n```bash\ni18ntk-usage --code-dir ./src --locales-dir ./locales --cleanup --dry-run-delete\n```\n\n## Runtime\n\n```js\nconst runtime = require('i18ntk/runtime');\nconst i18n = runtime.initRuntime({\n baseDir: './locales',\n language: 'en',\n fallbackLanguage: 'en',\n});\n\nconsole.log(i18n.t('common.hello'));\ni18n.setLanguage('fr');\nconsole.log(i18n.getAvailableLanguages());\n```\n\n**Lazy loading** reduces memory on large locale folders:\n\n```js\nconst i18n = runtime.initRuntime({ baseDir: './locales', language: 'en', lazy: true });\n```\n\n**Per-call language overrides:**\n\n```js\ni18n.t('common.hello', {}, { language: 'de' });\n```\n\n**Batch translation:**\n\n```js\ni18n.translateBatch(['menu.home', 'menu.settings']);\n```\n\nProduction guidance:\n\n- Use the instance from `initRuntime()` — not module-level `runtime.t()` — in multi-tenant apps\n- Use `lazy: true` for large folders; `preload: true` for small sets\n- Call `refresh(language)` after deploying changed locale files\n- `i18ntk/runtime/enhanced` remains available for async/encryption compatibility\n\n[Runtime guide →](./docs/runtime.md)\n\n## Watch\n\n```js\nconst watchLocales = require('i18ntk/utils/watch-locales');\nconst watcher = watchLocales('./locales');\n\nwatcher.on('change', (filePath) => console.log('changed:', filePath));\nwatcher.on('add', (filePath) => console.log('added:', filePath));\nwatcher.stop();\n```\n\nFeatures: 300ms debounce, SHA-256 hash tracking, 50-directory cap. The callback form `watchLocales('./locales', onChange)` is still supported.\n\n## Documentation\n\n- [Getting Started](./docs/getting-started.md)\n- [Configuration](./docs/api/CONFIGURATION.md)\n- [API Reference](./docs/api/API_REFERENCE.md)\n- [Runtime API](./docs/runtime.md)\n- [Auto Translate](./docs/auto-translate.md)\n- [Scanner Guide](./docs/scanner-guide.md)\n- [Environment Variables](./docs/environment-variables.md)\n\n## Security\n\n- No API key required for default Auto Translate\n- Do not store secrets in locale files, `.i18ntk-config`, or protection files\n- Report issues via [SECURITY.md](./SECURITY.md)\n\n## Related\n\n| Tool | Purpose |\n| ---------------- | ------------------------------------------- |\n| i18ntk Workbench | VS Code localization health dashboard |\n| i18ntk Lens | Inline hovers, CodeLens, and diagnostics |\n| PublishGuard | Pre-publish safety scanner for npm packages |\n| ContextKit | AI coding context manager |\n\n## License\n\nSee [LICENSE](./LICENSE).\n"
245
248
  }
@@ -780,13 +780,13 @@ class SettingsManager {
780
780
  language: {
781
781
  type: 'string',
782
782
  description: 'Default language for translations',
783
- enum: ['en', 'de', 'es', 'fr', 'ru', 'ja', 'zh'],
783
+ enum: ['en', 'de', 'es', 'fr', 'it', 'pt', 'nl', 'pl', 'sv', 'uk', 'cs', 'tr', 'ru', 'ja', 'ko', 'zh', 'ar', 'hi', 'th', 'vi', 'he', 'el', 'hu'],
784
784
  default: 'en'
785
785
  },
786
786
  uiLanguage: {
787
787
  type: 'string',
788
788
  description: 'UI language for toolkit interface',
789
- enum: ['en', 'de', 'es', 'fr', 'ru', 'ja', 'zh'],
789
+ enum: ['en', 'de', 'es', 'fr', 'it', 'pt', 'nl', 'pl', 'sv', 'uk', 'cs', 'tr', 'ru', 'ja', 'ko', 'zh', 'ar', 'hi', 'th', 'vi', 'he', 'el', 'hu'],
790
790
  default: 'en'
791
791
  },
792
792
  theme: {
@@ -1129,9 +1129,25 @@ class SettingsManager {
1129
1129
  { code: 'de', name: 'Deutsch' },
1130
1130
  { code: 'es', name: 'Español' },
1131
1131
  { code: 'fr', name: 'Français' },
1132
+ { code: 'it', name: 'Italiano' },
1133
+ { code: 'pt', name: 'Português' },
1134
+ { code: 'nl', name: 'Nederlands' },
1135
+ { code: 'pl', name: 'Polski' },
1136
+ { code: 'sv', name: 'Svenska' },
1137
+ { code: 'uk', name: 'Українська' },
1138
+ { code: 'cs', name: 'Čeština' },
1139
+ { code: 'tr', name: 'Türkçe' },
1132
1140
  { code: 'ru', name: 'Русский' },
1133
1141
  { code: 'ja', name: '日本語' },
1134
- { code: 'zh', name: '中文' }
1142
+ { code: 'ko', name: '한국어' },
1143
+ { code: 'zh', name: '中文' },
1144
+ { code: 'ar', name: 'العربية' },
1145
+ { code: 'hi', name: 'हिन्दी' },
1146
+ { code: 'th', name: 'ไทย' },
1147
+ { code: 'vi', name: 'Tiếng Việt' },
1148
+ { code: 'he', name: 'עברית' },
1149
+ { code: 'el', name: 'Ελληνικά' },
1150
+ { code: 'hu', name: 'Magyar' }
1135
1151
  ];
1136
1152
  }
1137
1153
  }