i18ntk 3.0.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 +57 -16
- package/README.md +226 -98
- package/main/i18ntk-sizing.js +471 -218
- package/main/i18ntk-translate.js +399 -68
- package/main/i18ntk-validate.js +26 -14
- package/main/manage/commands/TranslateCommand.js +273 -52
- package/main/manage/commands/ValidateCommand.js +25 -13
- package/package.json +4 -1
- package/settings/settings-cli.js +75 -29
- package/settings/settings-manager.js +109 -1
- package/ui-locales/de.json +14 -14
- package/ui-locales/en.json +14 -14
- package/ui-locales/es.json +14 -14
- package/ui-locales/fr.json +14 -14
- package/ui-locales/ja.json +14 -14
- package/ui-locales/ru.json +18 -17
- package/ui-locales/zh.json +14 -14
- package/utils/config-manager.js +20 -4
- package/utils/security.js +4 -3
- package/utils/translate/cli.js +20 -16
- package/utils/translate/placeholder.js +60 -0
- package/utils/translate/protection.js +243 -0
- package/utils/translate/report.js +49 -22
- package/utils/validation-risk.js +175 -0
package/settings/settings-cli.js
CHANGED
|
@@ -131,13 +131,14 @@ class SettingsCLI {
|
|
|
131
131
|
{ key: '1', label: t('settings.mainMenu.uiSettings'), description: t('settings.mainMenu.uiSettingsDesc') },
|
|
132
132
|
{ key: '2', label: t('settings.mainMenu.directorySettings'), description: t('settings.mainMenu.directorySettingsDesc') },
|
|
133
133
|
{ key: '3', label: t('settings.mainMenu.scriptDirectorySettings'), description: t('settings.mainMenu.scriptDirectorySettingsDesc') },
|
|
134
|
-
{ key: '4', label: t('settings.mainMenu.processingSettings'), description: t('settings.mainMenu.processingSettingsDesc') },
|
|
135
|
-
{ key: '5', label: t('settings.mainMenu.backupSettings'), description: t('settings.mainMenu.backupSettingsDesc') },
|
|
136
|
-
{ key: '6', label: t('settings.mainMenu.securitySettings'), description: `${t('settings.mainMenu.securitySettingsDesc')} ${pinStatus}` },
|
|
137
|
-
{ key: '7', label: t('settings.mainMenu.advancedSettings'), description: t('settings.mainMenu.advancedSettingsDesc') },
|
|
138
|
-
{ key: '8', label: t('settings.mainMenu.viewAllSettings'), description: t('settings.mainMenu.viewAllSettingsDesc') },
|
|
139
|
-
{ key: '9', label: t('settings.mainMenu.importExport'), description: t('settings.mainMenu.importExportDesc') },
|
|
140
|
-
{ key: '
|
|
134
|
+
{ key: '4', label: t('settings.mainMenu.processingSettings'), description: t('settings.mainMenu.processingSettingsDesc') },
|
|
135
|
+
{ key: '5', label: t('settings.mainMenu.backupSettings'), description: t('settings.mainMenu.backupSettingsDesc') },
|
|
136
|
+
{ key: '6', label: t('settings.mainMenu.securitySettings'), description: `${t('settings.mainMenu.securitySettingsDesc')} ${pinStatus}` },
|
|
137
|
+
{ key: '7', label: t('settings.mainMenu.advancedSettings'), description: t('settings.mainMenu.advancedSettingsDesc') },
|
|
138
|
+
{ key: '8', label: t('settings.mainMenu.viewAllSettings'), description: t('settings.mainMenu.viewAllSettingsDesc') },
|
|
139
|
+
{ key: '9', label: t('settings.mainMenu.importExport'), description: t('settings.mainMenu.importExportDesc') },
|
|
140
|
+
{ key: 'a', label: 'Auto Translate Beta', description: 'Tune placeholder handling, concurrency, batching, and reports' },
|
|
141
|
+
{ key: '0', label: t('settings.mainMenu.reportBug'), description: t('settings.mainMenu.reportBugDesc') },
|
|
141
142
|
{ key: 'x', label: 'Reset Script Directory Overrides', description: 'Clear script directory overrides and use defaults' },
|
|
142
143
|
{ key: 'r', label: t('settings.mainMenu.resetToDefaults'), description: t('settings.mainMenu.resetToDefaultsDesc') },
|
|
143
144
|
{ key: 'u', label: t('settings.mainMenu.updatePackage'), description: t('settings.mainMenu.updatePackageDesc') },
|
|
@@ -188,12 +189,15 @@ class SettingsCLI {
|
|
|
188
189
|
case '8':
|
|
189
190
|
await this.showAllSettings();
|
|
190
191
|
break;
|
|
191
|
-
case '9':
|
|
192
|
-
await this.showImportExport();
|
|
193
|
-
break;
|
|
194
|
-
case '
|
|
195
|
-
await this.
|
|
196
|
-
break;
|
|
192
|
+
case '9':
|
|
193
|
+
await this.showImportExport();
|
|
194
|
+
break;
|
|
195
|
+
case 'a':
|
|
196
|
+
await this.showAutoTranslateSettings();
|
|
197
|
+
break;
|
|
198
|
+
case '0':
|
|
199
|
+
await this.reportBug();
|
|
200
|
+
break;
|
|
197
201
|
case 'x':
|
|
198
202
|
await this.resetScriptDirectories();
|
|
199
203
|
break;
|
|
@@ -302,7 +306,7 @@ class SettingsCLI {
|
|
|
302
306
|
/**
|
|
303
307
|
* Show processing settings menu
|
|
304
308
|
*/
|
|
305
|
-
async showProcessingSettings() {
|
|
309
|
+
async showProcessingSettings() {
|
|
306
310
|
// Refresh language from settings to ensure consistency
|
|
307
311
|
if (typeof uiI18n.refreshLanguageFromSettings === 'function') {
|
|
308
312
|
uiI18n.refreshLanguageFromSettings();
|
|
@@ -318,8 +322,37 @@ class SettingsCLI {
|
|
|
318
322
|
'advanced.sizingThreshold': t('settings.fields.sizingThreshold.label')
|
|
319
323
|
};
|
|
320
324
|
|
|
321
|
-
await this.showSettingsCategory(processSettings);
|
|
322
|
-
}
|
|
325
|
+
await this.showSettingsCategory(processSettings);
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
async showAutoTranslateSettings() {
|
|
329
|
+
if (typeof uiI18n.refreshLanguageFromSettings === 'function') {
|
|
330
|
+
uiI18n.refreshLanguageFromSettings();
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
this.clearScreen();
|
|
334
|
+
this.showHeader();
|
|
335
|
+
console.log(`${colors.bright}Auto Translate Beta Settings${colors.reset}\n`);
|
|
336
|
+
|
|
337
|
+
const autoTranslateSettings = {
|
|
338
|
+
'autoTranslate.placeholderMode': 'Placeholder handling mode',
|
|
339
|
+
'autoTranslate.concurrency': 'Concurrent translation requests',
|
|
340
|
+
'autoTranslate.batchSize': 'Text segments per batch',
|
|
341
|
+
'autoTranslate.progressInterval': 'Progress update interval',
|
|
342
|
+
'autoTranslate.retryCount': 'Retry count',
|
|
343
|
+
'autoTranslate.retryDelay': 'Retry delay (ms)',
|
|
344
|
+
'autoTranslate.timeout': 'Request timeout (ms)',
|
|
345
|
+
'autoTranslate.dryRunFirst': 'Dry-run preview first',
|
|
346
|
+
'autoTranslate.reportStdout': 'Print report to terminal',
|
|
347
|
+
'autoTranslate.bom': 'Write UTF-8 BOM',
|
|
348
|
+
'autoTranslate.protectionEnabled': 'Protect brand terms, keys, values',
|
|
349
|
+
'autoTranslate.protectionFile': 'Protection JSON file',
|
|
350
|
+
'autoTranslate.promptProtectionSetup': 'Ask to create protection file',
|
|
351
|
+
'autoTranslate.promptProtectionUpdate': 'Ask to update protection rules'
|
|
352
|
+
};
|
|
353
|
+
|
|
354
|
+
await this.showSettingsCategory(autoTranslateSettings);
|
|
355
|
+
}
|
|
323
356
|
|
|
324
357
|
/**
|
|
325
358
|
* Show advanced settings menu
|
|
@@ -531,9 +564,16 @@ class SettingsCLI {
|
|
|
531
564
|
'security.adminPinEnabled': ['true', 'false'],
|
|
532
565
|
'security.pinProtection.enabled': ['true', 'false'],
|
|
533
566
|
'advanced.backupBeforeChanges': ['true', 'false'],
|
|
534
|
-
'backup.enabled': ['true', 'false'],
|
|
535
|
-
'backup.singleFileMode': ['true', 'false']
|
|
536
|
-
|
|
567
|
+
'backup.enabled': ['true', 'false'],
|
|
568
|
+
'backup.singleFileMode': ['true', 'false'],
|
|
569
|
+
'autoTranslate.placeholderMode': ['preserve', 'skip', 'send'],
|
|
570
|
+
'autoTranslate.dryRunFirst': ['true', 'false'],
|
|
571
|
+
'autoTranslate.reportStdout': ['true', 'false'],
|
|
572
|
+
'autoTranslate.bom': ['true', 'false'],
|
|
573
|
+
'autoTranslate.protectionEnabled': ['true', 'false'],
|
|
574
|
+
'autoTranslate.promptProtectionSetup': ['true', 'false'],
|
|
575
|
+
'autoTranslate.promptProtectionUpdate': ['true', 'false']
|
|
576
|
+
};
|
|
537
577
|
if (key === 'language') {
|
|
538
578
|
return settingsManager.getAvailableLanguages().map(l => l.code);
|
|
539
579
|
}
|
|
@@ -566,8 +606,14 @@ class SettingsCLI {
|
|
|
566
606
|
'lockoutDuration': { min: 1, max: 60, type: 'int', unit: 'minutes' },
|
|
567
607
|
'backupRetention': { min: 1, max: 30, type: 'int', unit: 'days' },
|
|
568
608
|
'logRetention': { min: 1, max: 90, type: 'int', unit: 'days' },
|
|
569
|
-
'retentionDays': { min: 1, max: 365, type: 'int', unit: 'days' },
|
|
570
|
-
'maxBackups': { min: 1, max: 3, type: 'int' }
|
|
609
|
+
'retentionDays': { min: 1, max: 365, type: 'int', unit: 'days' },
|
|
610
|
+
'maxBackups': { min: 1, max: 3, type: 'int' },
|
|
611
|
+
'autoTranslate.concurrency': { min: 1, max: 25, type: 'int' },
|
|
612
|
+
'autoTranslate.batchSize': { min: 1, max: 10000, type: 'int' },
|
|
613
|
+
'autoTranslate.progressInterval': { min: 1, max: 10000, type: 'int' },
|
|
614
|
+
'autoTranslate.retryCount': { min: 0, max: 10, type: 'int' },
|
|
615
|
+
'autoTranslate.retryDelay': { min: 0, max: 30000, type: 'int', unit: 'ms' },
|
|
616
|
+
'autoTranslate.timeout': { min: 1000, max: 120000, type: 'int', unit: 'ms' }
|
|
571
617
|
};
|
|
572
618
|
|
|
573
619
|
for (const [field, rules] of Object.entries(validations)) {
|
|
@@ -827,10 +873,10 @@ class SettingsCLI {
|
|
|
827
873
|
let finalValue = convertedValue;
|
|
828
874
|
if (typeof finalValue === 'string') {
|
|
829
875
|
const lowerKey = key.toLowerCase();
|
|
830
|
-
if (lowerKey.includes('dir') || lowerKey.includes('path') || lowerKey.includes('root')) {
|
|
831
|
-
finalValue = finalValue.replace(/^([/\\])/, './');
|
|
832
|
-
finalValue = configManager.toRelative(path.resolve(finalValue));
|
|
833
|
-
}
|
|
876
|
+
if (lowerKey.includes('dir') || lowerKey.includes('path') || lowerKey.includes('root') || key === 'autoTranslate.protectionFile') {
|
|
877
|
+
finalValue = finalValue.replace(/^([/\\])/, './');
|
|
878
|
+
finalValue = configManager.toRelative(path.resolve(finalValue));
|
|
879
|
+
}
|
|
834
880
|
}
|
|
835
881
|
this.setNestedValue(this.settings, key, finalValue);
|
|
836
882
|
this.modified = true;
|
|
@@ -1934,9 +1980,9 @@ ${colors.dim}${t('settings.updatePackage.command')}: npm update i18ntk -g${color
|
|
|
1934
1980
|
return `${colors.dim}(not set)${colors.reset}`;
|
|
1935
1981
|
}
|
|
1936
1982
|
const lowerKey = key.toLowerCase();
|
|
1937
|
-
if (typeof value === 'string' && (lowerKey.includes('dir') || lowerKey.includes('path') || lowerKey.includes('root'))) {
|
|
1938
|
-
return configManager.toRelative(path.resolve(value));
|
|
1939
|
-
}
|
|
1983
|
+
if (typeof value === 'string' && (lowerKey.includes('dir') || lowerKey.includes('path') || lowerKey.includes('root') || key === 'autoTranslate.protectionFile')) {
|
|
1984
|
+
return configManager.toRelative(path.resolve(value));
|
|
1985
|
+
}
|
|
1940
1986
|
if (typeof value === 'boolean') {
|
|
1941
1987
|
return value ? `${colors.green}enabled${colors.reset}` : `${colors.red}disabled${colors.reset}`;
|
|
1942
1988
|
}
|
|
@@ -1960,7 +2006,7 @@ ${colors.dim}${t('settings.updatePackage.command')}: npm update i18ntk -g${color
|
|
|
1960
2006
|
if (['false','no','n','0','off','disabled'].includes(lower)) return false;
|
|
1961
2007
|
|
|
1962
2008
|
// Numbers for known numeric settings
|
|
1963
|
-
const numericKeys = /(sessionTimeout|maxFailedAttempts|lockoutDuration|retentionDays|maxBackups|advanced\.|backup\.)/;
|
|
2009
|
+
const numericKeys = /(sessionTimeout|maxFailedAttempts|lockoutDuration|retentionDays|maxBackups|advanced\.|backup\.|autoTranslate\.(concurrency|batchSize|progressInterval|retryCount|retryDelay|timeout))/;
|
|
1964
2010
|
if (numericKeys.test(key)) {
|
|
1965
2011
|
const n = Number(raw);
|
|
1966
2012
|
if (!Number.isNaN(n)) return n;
|
|
@@ -52,6 +52,22 @@ class SettingsManager {
|
|
|
52
52
|
"memoryOptimization": true,
|
|
53
53
|
"compression": true
|
|
54
54
|
},
|
|
55
|
+
"autoTranslate": {
|
|
56
|
+
"placeholderMode": "preserve",
|
|
57
|
+
"concurrency": 6,
|
|
58
|
+
"batchSize": 100,
|
|
59
|
+
"progressInterval": 25,
|
|
60
|
+
"retryCount": 3,
|
|
61
|
+
"retryDelay": 1000,
|
|
62
|
+
"timeout": 15000,
|
|
63
|
+
"dryRunFirst": true,
|
|
64
|
+
"reportStdout": true,
|
|
65
|
+
"bom": false,
|
|
66
|
+
"protectionEnabled": true,
|
|
67
|
+
"protectionFile": "./i18ntk-auto-translate.json",
|
|
68
|
+
"promptProtectionSetup": true,
|
|
69
|
+
"promptProtectionUpdate": true
|
|
70
|
+
},
|
|
55
71
|
"reports": {
|
|
56
72
|
"format": "json",
|
|
57
73
|
"includeSource": false,
|
|
@@ -368,6 +384,10 @@ class SettingsManager {
|
|
|
368
384
|
if (loadedSettings.processing) {
|
|
369
385
|
merged.processing = { ...this.defaultConfig.processing, ...loadedSettings.processing };
|
|
370
386
|
}
|
|
387
|
+
|
|
388
|
+
if (loadedSettings.autoTranslate) {
|
|
389
|
+
merged.autoTranslate = { ...this.defaultConfig.autoTranslate, ...loadedSettings.autoTranslate };
|
|
390
|
+
}
|
|
371
391
|
|
|
372
392
|
if (loadedSettings.advanced) {
|
|
373
393
|
merged.advanced = { ...this.defaultConfig.advanced, ...loadedSettings.advanced };
|
|
@@ -875,6 +895,95 @@ class SettingsManager {
|
|
|
875
895
|
}
|
|
876
896
|
}
|
|
877
897
|
},
|
|
898
|
+
autoTranslate: {
|
|
899
|
+
type: 'object',
|
|
900
|
+
description: 'Auto Translate beta defaults',
|
|
901
|
+
properties: {
|
|
902
|
+
placeholderMode: {
|
|
903
|
+
type: 'string',
|
|
904
|
+
description: 'How placeholder-bearing strings are handled during auto translation',
|
|
905
|
+
enum: ['preserve', 'skip', 'send'],
|
|
906
|
+
default: 'preserve'
|
|
907
|
+
},
|
|
908
|
+
concurrency: {
|
|
909
|
+
type: 'number',
|
|
910
|
+
description: 'Maximum concurrent translation requests',
|
|
911
|
+
minimum: 1,
|
|
912
|
+
maximum: 25,
|
|
913
|
+
default: 6
|
|
914
|
+
},
|
|
915
|
+
batchSize: {
|
|
916
|
+
type: 'number',
|
|
917
|
+
description: 'Number of text segments scheduled per translation batch',
|
|
918
|
+
minimum: 1,
|
|
919
|
+
maximum: 10000,
|
|
920
|
+
default: 100
|
|
921
|
+
},
|
|
922
|
+
progressInterval: {
|
|
923
|
+
type: 'number',
|
|
924
|
+
description: 'Number of completed text segments between progress updates',
|
|
925
|
+
minimum: 1,
|
|
926
|
+
maximum: 10000,
|
|
927
|
+
default: 25
|
|
928
|
+
},
|
|
929
|
+
retryCount: {
|
|
930
|
+
type: 'number',
|
|
931
|
+
description: 'Maximum retries per failed translation request',
|
|
932
|
+
minimum: 0,
|
|
933
|
+
maximum: 10,
|
|
934
|
+
default: 3
|
|
935
|
+
},
|
|
936
|
+
retryDelay: {
|
|
937
|
+
type: 'number',
|
|
938
|
+
description: 'Base retry delay in milliseconds',
|
|
939
|
+
minimum: 0,
|
|
940
|
+
maximum: 30000,
|
|
941
|
+
default: 1000
|
|
942
|
+
},
|
|
943
|
+
timeout: {
|
|
944
|
+
type: 'number',
|
|
945
|
+
description: 'HTTP request timeout in milliseconds',
|
|
946
|
+
minimum: 1000,
|
|
947
|
+
maximum: 120000,
|
|
948
|
+
default: 15000
|
|
949
|
+
},
|
|
950
|
+
dryRunFirst: {
|
|
951
|
+
type: 'boolean',
|
|
952
|
+
description: 'Run a dry-run preview before interactive manager translation',
|
|
953
|
+
default: true
|
|
954
|
+
},
|
|
955
|
+
reportStdout: {
|
|
956
|
+
type: 'boolean',
|
|
957
|
+
description: 'Print the post-translation report to stdout',
|
|
958
|
+
default: true
|
|
959
|
+
},
|
|
960
|
+
bom: {
|
|
961
|
+
type: 'boolean',
|
|
962
|
+
description: 'Write translated JSON files with a UTF-8 BOM',
|
|
963
|
+
default: false
|
|
964
|
+
},
|
|
965
|
+
protectionEnabled: {
|
|
966
|
+
type: 'boolean',
|
|
967
|
+
description: 'Enable user-editable protected terms, keys, values, and patterns',
|
|
968
|
+
default: true
|
|
969
|
+
},
|
|
970
|
+
protectionFile: {
|
|
971
|
+
type: 'string',
|
|
972
|
+
description: 'Project JSON file containing Auto Translate protection rules',
|
|
973
|
+
default: './i18ntk-auto-translate.json'
|
|
974
|
+
},
|
|
975
|
+
promptProtectionSetup: {
|
|
976
|
+
type: 'boolean',
|
|
977
|
+
description: 'Ask to create the protection file when Auto Translate first runs',
|
|
978
|
+
default: true
|
|
979
|
+
},
|
|
980
|
+
promptProtectionUpdate: {
|
|
981
|
+
type: 'boolean',
|
|
982
|
+
description: 'Ask whether to update protection rules before manager translations',
|
|
983
|
+
default: true
|
|
984
|
+
}
|
|
985
|
+
}
|
|
986
|
+
},
|
|
878
987
|
security: {
|
|
879
988
|
type: 'object',
|
|
880
989
|
properties: {
|
|
@@ -1003,4 +1112,3 @@ class SettingsManager {
|
|
|
1003
1112
|
}
|
|
1004
1113
|
|
|
1005
1114
|
module.exports = SettingsManager;
|
|
1006
|
-
|
package/ui-locales/de.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"meta": {
|
|
3
|
-
"version": "1.
|
|
4
|
-
"updated": "
|
|
3
|
+
"version": "3.1.1",
|
|
4
|
+
"updated": "2026-05-07"
|
|
5
5
|
},
|
|
6
6
|
"common": {
|
|
7
7
|
"welcome": "Willkommen",
|
|
@@ -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,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"meta": {
|
|
3
|
-
"version": "1.
|
|
4
|
-
"updated": "
|
|
3
|
+
"version": "3.1.1",
|
|
4
|
+
"updated": "2026-05-07"
|
|
5
5
|
},
|
|
6
6
|
"common": {
|
|
7
7
|
"welcome": "Welcome",
|
|
@@ -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,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"meta": {
|
|
3
|
-
"version": "1.
|
|
4
|
-
"updated": "
|
|
3
|
+
"version": "3.1.1",
|
|
4
|
+
"updated": "2026-05-07"
|
|
5
5
|
},
|
|
6
6
|
"common": {
|
|
7
7
|
"welcome": "Bienvenido",
|
|
@@ -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,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"meta": {
|
|
3
|
-
"version": "1.
|
|
4
|
-
"updated": "
|
|
3
|
+
"version": "3.1.1",
|
|
4
|
+
"updated": "2026-05-07"
|
|
5
5
|
},
|
|
6
6
|
"common": {
|
|
7
7
|
"welcome": "Bienvenue",
|
|
@@ -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,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"meta": {
|
|
3
|
-
"version": "1.
|
|
4
|
-
"updated": "
|
|
3
|
+
"version": "3.1.1",
|
|
4
|
+
"updated": "2026-05-07"
|
|
5
5
|
},
|
|
6
6
|
"common": {
|
|
7
7
|
"welcome": "ようこそ",
|
|
@@ -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,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"meta": {
|
|
3
|
-
"version": "1.
|
|
4
|
-
"updated": "
|
|
3
|
+
"version": "3.1.1",
|
|
4
|
+
"updated": "2026-05-07"
|
|
5
5
|
},
|
|
6
6
|
"common": {
|
|
7
7
|
"welcome": "Добро пожаловать",
|
|
@@ -984,7 +984,8 @@
|
|
|
984
984
|
"translation_not_found": "Перевод для ключа не найден: {key}",
|
|
985
985
|
"translation_key_not_string": "Значение ключа перевода не является строкой: {key}",
|
|
986
986
|
"error_reading_locales_directory": "Ошибка чтения директории локалей: {errorMessage}"
|
|
987
|
-
}
|
|
987
|
+
},
|
|
988
|
+
"translateCommand": "translate - Автоперевод файлов локалей (Бета)"
|
|
988
989
|
},
|
|
989
990
|
"init": {
|
|
990
991
|
"initializationTitle": "🚀 Набор инструментов i18n — Инициализация проекта",
|
|
@@ -1104,18 +1105,18 @@
|
|
|
1104
1105
|
"warningProceedingWithoutFramework": "Продолжаем без обнаружения платформы i18n."
|
|
1105
1106
|
},
|
|
1106
1107
|
"language": {
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
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 для продолжения..."
|
|
1119
1120
|
},
|
|
1120
1121
|
"maintainLanguagePurity": {
|
|
1121
1122
|
"workflow_title": "🚀 Рабочий процесс поддержания чистоты языков",
|
|
@@ -2111,8 +2112,8 @@
|
|
|
2111
2112
|
"sizingCommand": "Оценка команды",
|
|
2112
2113
|
"completeCommand": "Завершение команды",
|
|
2113
2114
|
"summaryCommand": "Сводка команды",
|
|
2114
|
-
|
|
2115
|
-
|
|
2115
|
+
"scannerCommand": "scanner - 🔍 Сканирование проблем i18n",
|
|
2116
|
+
"translateCommand": "translate - Автоперевод (Бета)",
|
|
2116
2117
|
"debugCommand": "Отладка команды"
|
|
2117
2118
|
},
|
|
2118
2119
|
"test_complete_system": {
|
package/ui-locales/zh.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"meta": {
|
|
3
|
-
"version": "1.
|
|
4
|
-
"updated": "
|
|
3
|
+
"version": "3.1.1",
|
|
4
|
+
"updated": "2026-05-07"
|
|
5
5
|
},
|
|
6
6
|
"common": {
|
|
7
7
|
"welcome": "欢迎",
|
|
@@ -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": "🚀 语言纯洁度维护工作流",
|