@scoutello/i18n-magic 0.57.0 ā 0.57.3
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/dist/commands/check-missing.d.ts.map +1 -1
- package/dist/commands/check-missing.js +100 -3
- package/dist/commands/check-missing.js.map +1 -1
- package/dist/commands/scan.d.ts.map +1 -1
- package/dist/commands/scan.js +6 -0
- package/dist/commands/scan.js.map +1 -1
- package/dist/commands/sync-locales.d.ts.map +1 -1
- package/dist/commands/sync-locales.js +186 -98
- package/dist/commands/sync-locales.js.map +1 -1
- package/dist/lib/utils.d.ts +6 -2
- package/dist/lib/utils.d.ts.map +1 -1
- package/dist/lib/utils.js +33 -12
- package/dist/lib/utils.js.map +1 -1
- package/package.json +10 -8
- package/src/commands/check-missing.ts +154 -3
- package/src/commands/scan.ts +7 -0
- package/src/commands/sync-locales.ts +254 -155
- package/src/lib/utils.ts +37 -10
- package/dist/commands/create-pruned-namespace-automated.d.ts +0 -20
- package/dist/commands/create-pruned-namespace-automated.d.ts.map +0 -1
- package/dist/commands/create-pruned-namespace-automated.js +0 -98
- package/dist/commands/create-pruned-namespace-automated.js.map +0 -1
- package/dist/commands/create-pruned-namespace.d.ts +0 -3
- package/dist/commands/create-pruned-namespace.d.ts.map +0 -1
- package/dist/commands/create-pruned-namespace.js +0 -123
- package/dist/commands/create-pruned-namespace.js.map +0 -1
- package/dist/i18n-magic.cjs.development.js +0 -1787
- package/dist/i18n-magic.cjs.development.js.map +0 -1
- package/dist/i18n-magic.cjs.production.min.js +0 -2
- package/dist/i18n-magic.cjs.production.min.js.map +0 -1
- package/dist/i18n-magic.esm.js +0 -1776
- package/dist/i18n-magic.esm.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-missing.d.ts","sourceRoot":"","sources":["../../src/commands/check-missing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"check-missing.d.ts","sourceRoot":"","sources":["../../src/commands/check-missing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AASpD,eAAO,MAAM,YAAY,GAAU,QAAQ,aAAa,kBAwJvD,CAAA"}
|
|
@@ -1,9 +1,106 @@
|
|
|
1
|
-
import { getMissingKeys } from "../lib/utils.js";
|
|
1
|
+
import { getMissingKeys, findExistingTranslations, loadLocalesFile, writeLocalesFile, translateKey, } from "../lib/utils.js";
|
|
2
2
|
export const checkMissing = async (config) => {
|
|
3
|
+
const { loadPath, savePath, defaultLocale, namespaces, locales, context, openai, model, disableTranslationDuringScan, } = config;
|
|
3
4
|
const newKeys = await getMissingKeys(config);
|
|
4
|
-
if (newKeys.length
|
|
5
|
-
console.
|
|
5
|
+
if (newKeys.length === 0) {
|
|
6
|
+
console.log("ā
No missing translations found.");
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
console.log(`\nš Found ${newKeys.length} missing key(s) in default locale (${defaultLocale}):`);
|
|
10
|
+
// Group keys by namespace for clearer output
|
|
11
|
+
const keysByNamespace = {};
|
|
12
|
+
for (const key of newKeys) {
|
|
13
|
+
for (const ns of key.namespaces) {
|
|
14
|
+
if (!keysByNamespace[ns]) {
|
|
15
|
+
keysByNamespace[ns] = [];
|
|
16
|
+
}
|
|
17
|
+
keysByNamespace[ns].push(key.key);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
for (const [namespace, keys] of Object.entries(keysByNamespace)) {
|
|
21
|
+
console.log(`\n š¦ ${namespace}: ${keys.length} missing key(s)`);
|
|
22
|
+
for (const key of keys) {
|
|
23
|
+
console.log(` - ${key}`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
// Try to auto-fill from other namespaces (like scan does)
|
|
27
|
+
const keysList = newKeys.map((k) => k.key);
|
|
28
|
+
const existingTranslationResults = await findExistingTranslations(keysList, namespaces, defaultLocale, loadPath);
|
|
29
|
+
const keysWithValues = [];
|
|
30
|
+
const reusedKeys = [];
|
|
31
|
+
const stillMissingKeys = [];
|
|
32
|
+
for (const newKey of newKeys) {
|
|
33
|
+
const existingValue = existingTranslationResults[newKey.key];
|
|
34
|
+
if (existingValue !== null) {
|
|
35
|
+
reusedKeys.push(newKey.key);
|
|
36
|
+
keysWithValues.push({
|
|
37
|
+
key: newKey.key,
|
|
38
|
+
namespaces: newKey.namespaces,
|
|
39
|
+
value: existingValue,
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
stillMissingKeys.push(newKey.key);
|
|
44
|
+
keysWithValues.push({
|
|
45
|
+
key: newKey.key,
|
|
46
|
+
namespaces: newKey.namespaces,
|
|
47
|
+
value: null,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
// If we can auto-fill some keys, do it
|
|
52
|
+
if (reusedKeys.length > 0) {
|
|
53
|
+
console.log(`\nš Auto-reusing ${reusedKeys.length} existing value(s) from other namespaces...`);
|
|
54
|
+
const keysToWrite = keysWithValues.filter((k) => k.value !== null);
|
|
55
|
+
const newKeysObject = keysToWrite.reduce((prev, next) => {
|
|
56
|
+
prev[next.key] = next.value;
|
|
57
|
+
return prev;
|
|
58
|
+
}, {});
|
|
59
|
+
const allLocales = disableTranslationDuringScan ? [defaultLocale] : locales;
|
|
60
|
+
// Batch translate for all non-default locales in parallel
|
|
61
|
+
const translationCache = {
|
|
62
|
+
[defaultLocale]: newKeysObject,
|
|
63
|
+
};
|
|
64
|
+
const nonDefaultLocales = allLocales.filter((l) => l !== defaultLocale);
|
|
65
|
+
if (nonDefaultLocales.length > 0 && !disableTranslationDuringScan) {
|
|
66
|
+
console.log(` š Translating to ${nonDefaultLocales.length} other locale(s)...`);
|
|
67
|
+
await Promise.all(nonDefaultLocales.map(async (locale) => {
|
|
68
|
+
const translatedValues = await translateKey({
|
|
69
|
+
inputLanguage: defaultLocale,
|
|
70
|
+
outputLanguage: locale,
|
|
71
|
+
context,
|
|
72
|
+
object: newKeysObject,
|
|
73
|
+
openai,
|
|
74
|
+
model,
|
|
75
|
+
});
|
|
76
|
+
translationCache[locale] = translatedValues;
|
|
77
|
+
}));
|
|
78
|
+
}
|
|
79
|
+
// Process all locale/namespace combinations in parallel
|
|
80
|
+
await Promise.all(allLocales.flatMap((locale) => namespaces.map(async (namespace) => {
|
|
81
|
+
const existingKeys = await loadLocalesFile(loadPath, locale, namespace);
|
|
82
|
+
const relevantKeys = keysToWrite.filter((key) => key.namespaces?.includes(namespace));
|
|
83
|
+
if (relevantKeys.length === 0) {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
const translatedValues = translationCache[locale];
|
|
87
|
+
for (const key of relevantKeys) {
|
|
88
|
+
existingKeys[key.key] = translatedValues[key.key];
|
|
89
|
+
}
|
|
90
|
+
await writeLocalesFile(savePath, locale, namespace, existingKeys);
|
|
91
|
+
console.log(` ā
Updated ${locale}/${namespace}.json with ${relevantKeys.length} key(s)`);
|
|
92
|
+
})));
|
|
93
|
+
console.log(`\nā
Successfully auto-filled ${reusedKeys.length} key(s) from existing translations.`);
|
|
94
|
+
}
|
|
95
|
+
// Now check if there are still missing keys that couldn't be auto-filled
|
|
96
|
+
if (stillMissingKeys.length > 0) {
|
|
97
|
+
console.error(`\nā Error: ${stillMissingKeys.length} translation(s) could not be auto-filled:`);
|
|
98
|
+
for (const key of stillMissingKeys) {
|
|
99
|
+
console.error(` - ${key}`);
|
|
100
|
+
}
|
|
101
|
+
console.error(`\nPlease run 'i18n-magic scan' to provide values for these keys.`);
|
|
6
102
|
process.exit(1);
|
|
7
103
|
}
|
|
104
|
+
console.log("\nā
All translations are complete.");
|
|
8
105
|
};
|
|
9
106
|
//# sourceMappingURL=check-missing.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-missing.js","sourceRoot":"","sources":["../../src/commands/check-missing.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"check-missing.js","sourceRoot":"","sources":["../../src/commands/check-missing.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../src/commands/scan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAYpD,eAAO,MAAM,gBAAgB,GAAU,QAAQ,aAAa,
|
|
1
|
+
{"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../src/commands/scan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAYpD,eAAO,MAAM,gBAAgB,GAAU,QAAQ,aAAa,kBA2I3D,CAAA"}
|
package/dist/commands/scan.js
CHANGED
|
@@ -66,6 +66,7 @@ export const translateMissing = async (config) => {
|
|
|
66
66
|
}));
|
|
67
67
|
}
|
|
68
68
|
// Process all locale/namespace combinations in parallel
|
|
69
|
+
const writeResults = [];
|
|
69
70
|
await Promise.all(allLocales.flatMap((locale) => namespaces.map(async (namespace) => {
|
|
70
71
|
const existingKeys = await loadLocalesFile(loadPath, locale, namespace);
|
|
71
72
|
const relevantKeys = newKeysWithDefaultLocale.filter((key) => key.namespaces?.includes(namespace));
|
|
@@ -77,7 +78,12 @@ export const translateMissing = async (config) => {
|
|
|
77
78
|
existingKeys[key.key] = translatedValues[key.key];
|
|
78
79
|
}
|
|
79
80
|
await writeLocalesFile(savePath, locale, namespace, existingKeys);
|
|
81
|
+
writeResults.push({ locale, namespace, keyCount: relevantKeys.length });
|
|
80
82
|
})));
|
|
83
|
+
// Log where keys were written
|
|
84
|
+
for (const { locale, namespace, keyCount } of writeResults) {
|
|
85
|
+
console.log(` š Wrote ${keyCount} key(s) to ${locale}/${namespace}.json`);
|
|
86
|
+
}
|
|
81
87
|
await checkAllKeysExist(config);
|
|
82
88
|
console.log(`Successfully translated ${newKeys.length} keys.`);
|
|
83
89
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scan.js","sourceRoot":"","sources":["../../src/commands/scan.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"scan.js","sourceRoot":"","sources":["../../src/commands/scan.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-locales.d.ts","sourceRoot":"","sources":["../../src/commands/sync-locales.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sync-locales.d.ts","sourceRoot":"","sources":["../../src/commands/sync-locales.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAepD,eAAO,MAAM,WAAW,GAAU,QAAQ,aAAa,kBA4TtD,CAAA"}
|
|
@@ -1,10 +1,59 @@
|
|
|
1
1
|
import fs from "node:fs";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import cliProgress from "cli-progress";
|
|
2
4
|
import { TranslationError, loadLocalesFile, translateKey, writeLocalesFile, findExistingTranslations, } from "../lib/utils.js";
|
|
5
|
+
import { languages } from "../lib/languges.js";
|
|
6
|
+
const getLanguageLabel = (locale) => {
|
|
7
|
+
const lang = languages.find((l) => l.value === locale);
|
|
8
|
+
return lang?.label || locale;
|
|
9
|
+
};
|
|
3
10
|
export const syncLocales = async (config) => {
|
|
4
11
|
const { loadPath, savePath, defaultLocale, namespaces, locales, context, openai, } = config;
|
|
5
|
-
|
|
6
|
-
console.log(
|
|
7
|
-
console.log(
|
|
12
|
+
const localesToProcess = locales.filter((l) => l !== defaultLocale);
|
|
13
|
+
console.log(chalk.cyan("\nš Syncing translations\n"));
|
|
14
|
+
console.log(chalk.dim(` Default locale: ${chalk.white(getLanguageLabel(defaultLocale))}`));
|
|
15
|
+
console.log(chalk.dim(` Namespaces: ${chalk.white(namespaces.join(", "))}`));
|
|
16
|
+
console.log(chalk.dim(` Target languages: ${chalk.white(localesToProcess.length)}\n`));
|
|
17
|
+
// Create multi-bar container
|
|
18
|
+
const multibar = new cliProgress.MultiBar({
|
|
19
|
+
clearOnComplete: false,
|
|
20
|
+
hideCursor: true,
|
|
21
|
+
format: (options, params, payload) => {
|
|
22
|
+
const lang = payload.language || "unknown";
|
|
23
|
+
const status = payload.status || "";
|
|
24
|
+
const bar = options.barCompleteString?.substring(0, Math.round(params.progress * options.barsize)) || "";
|
|
25
|
+
const emptyBar = options.barIncompleteString?.substring(0, options.barsize - bar.length) || "";
|
|
26
|
+
// Color the bar based on progress
|
|
27
|
+
let coloredBar;
|
|
28
|
+
if (params.progress >= 1) {
|
|
29
|
+
coloredBar = chalk.green(bar) + chalk.gray(emptyBar);
|
|
30
|
+
}
|
|
31
|
+
else if (params.progress >= 0.5) {
|
|
32
|
+
coloredBar = chalk.yellow(bar) + chalk.gray(emptyBar);
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
coloredBar = chalk.cyan(bar) + chalk.gray(emptyBar);
|
|
36
|
+
}
|
|
37
|
+
const percentage = Math.round(params.progress * 100);
|
|
38
|
+
const paddedLang = lang.padEnd(12);
|
|
39
|
+
const paddedStatus = status.padEnd(20);
|
|
40
|
+
return ` ${chalk.white(paddedLang)} ${coloredBar} ${chalk.dim(percentage.toString().padStart(3))}% ${chalk.dim(paddedStatus)}`;
|
|
41
|
+
},
|
|
42
|
+
barCompleteChar: "ā",
|
|
43
|
+
barIncompleteChar: "ā",
|
|
44
|
+
barsize: 25,
|
|
45
|
+
}, cliProgress.Presets.shades_classic);
|
|
46
|
+
// Create a progress bar for each locale
|
|
47
|
+
const progressBars = {};
|
|
48
|
+
const localeStats = {};
|
|
49
|
+
for (const locale of localesToProcess) {
|
|
50
|
+
const langLabel = getLanguageLabel(locale);
|
|
51
|
+
progressBars[locale] = multibar.create(100, 0, {
|
|
52
|
+
language: langLabel,
|
|
53
|
+
status: "Waiting...",
|
|
54
|
+
});
|
|
55
|
+
localeStats[locale] = { missing: 0, reused: 0, translated: 0 };
|
|
56
|
+
}
|
|
8
57
|
try {
|
|
9
58
|
// Helper to ensure a locale/namespace file exists before we add keys
|
|
10
59
|
const ensureLocaleNamespaceFile = async (locale, namespace) => {
|
|
@@ -13,7 +62,6 @@ export const syncLocales = async (config) => {
|
|
|
13
62
|
.replace("{{lng}}", locale)
|
|
14
63
|
.replace("{{ns}}", namespace);
|
|
15
64
|
if (!fs.existsSync(filePath)) {
|
|
16
|
-
console.log(`š Creating missing namespace file: ${filePath}`);
|
|
17
65
|
await writeLocalesFile(savePath, locale, namespace, {});
|
|
18
66
|
}
|
|
19
67
|
}
|
|
@@ -21,116 +69,156 @@ export const syncLocales = async (config) => {
|
|
|
21
69
|
// Ensure all default-locale namespace files exist first
|
|
22
70
|
await Promise.all(namespaces.map((namespace) => ensureLocaleNamespaceFile(defaultLocale, namespace)));
|
|
23
71
|
// Process all non-default locales in parallel
|
|
24
|
-
const localesToProcess = locales.filter((l) => l !== defaultLocale);
|
|
25
72
|
await Promise.all(localesToProcess.map(async (locale) => {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
allMissingKeys[key]
|
|
56
|
-
|
|
57
|
-
namespaces
|
|
58
|
-
}
|
|
73
|
+
const bar = progressBars[locale];
|
|
74
|
+
const stats = localeStats[locale];
|
|
75
|
+
try {
|
|
76
|
+
// Stage 1: Loading (0-20%)
|
|
77
|
+
bar.update(5, { status: "Loading files..." });
|
|
78
|
+
// Ensure all namespace files for this locale exist before filling keys
|
|
79
|
+
await Promise.all(namespaces.map((namespace) => ensureLocaleNamespaceFile(locale, namespace)));
|
|
80
|
+
bar.update(10, { status: "Analyzing keys..." });
|
|
81
|
+
// Collect all missing keys for this locale across all namespaces
|
|
82
|
+
const allMissingKeys = {};
|
|
83
|
+
const namespaceKeys = {};
|
|
84
|
+
// Load existing keys for all namespaces in parallel
|
|
85
|
+
const namespaceResults = await Promise.all(namespaces.map(async (namespace) => {
|
|
86
|
+
const defaultLocaleKeys = await loadLocalesFile(loadPath, defaultLocale, namespace, { silent: true });
|
|
87
|
+
const localeKeys = await loadLocalesFile(loadPath, locale, namespace, { silent: true });
|
|
88
|
+
return {
|
|
89
|
+
namespace,
|
|
90
|
+
defaultLocaleKeys,
|
|
91
|
+
localeKeys,
|
|
92
|
+
};
|
|
93
|
+
}));
|
|
94
|
+
bar.update(20, { status: "Finding missing..." });
|
|
95
|
+
// Process results and collect missing keys
|
|
96
|
+
for (const result of namespaceResults) {
|
|
97
|
+
const { namespace, defaultLocaleKeys, localeKeys } = result;
|
|
98
|
+
namespaceKeys[namespace] = localeKeys;
|
|
99
|
+
// Check which keys from default locale are missing in current locale
|
|
100
|
+
for (const [key, value] of Object.entries(defaultLocaleKeys)) {
|
|
101
|
+
if (!localeKeys[key]) {
|
|
102
|
+
if (allMissingKeys[key]) {
|
|
103
|
+
// Key already exists, add this namespace to the list
|
|
104
|
+
allMissingKeys[key].namespaces.push(namespace);
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
// New missing key
|
|
108
|
+
allMissingKeys[key] = {
|
|
109
|
+
value,
|
|
110
|
+
namespaces: [namespace],
|
|
111
|
+
};
|
|
112
|
+
}
|
|
59
113
|
}
|
|
60
114
|
}
|
|
61
115
|
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
}
|
|
68
|
-
console.log(`Found ${missingKeysList.length} unique missing keys in ${locale}`);
|
|
69
|
-
// Check for existing translations of these keys in other namespaces (parallelized)
|
|
70
|
-
const keysToTranslate = {};
|
|
71
|
-
const existingTranslations = {};
|
|
72
|
-
const existingTranslationResults = await findExistingTranslations(missingKeysList, namespaces, locale, loadPath);
|
|
73
|
-
const reusedKeys = [];
|
|
74
|
-
for (const key of missingKeysList) {
|
|
75
|
-
const existingValue = existingTranslationResults[key];
|
|
76
|
-
// Use explicit null check instead of truthy check to handle empty string values
|
|
77
|
-
if (existingValue !== null) {
|
|
78
|
-
existingTranslations[key] = existingValue;
|
|
79
|
-
reusedKeys.push(key);
|
|
80
|
-
}
|
|
81
|
-
else {
|
|
82
|
-
keysToTranslate[key] = allMissingKeys[key].value;
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
// Batch log reused translations
|
|
86
|
-
if (reusedKeys.length > 0) {
|
|
87
|
-
console.log(`š Reusing ${reusedKeys.length} existing translations for ${locale}`);
|
|
88
|
-
}
|
|
89
|
-
let translatedValues = {};
|
|
90
|
-
// Translate only the keys that don't have existing translations
|
|
91
|
-
if (Object.keys(keysToTranslate).length > 0) {
|
|
92
|
-
console.log(`š¤ Translating ${Object.keys(keysToTranslate).length} new keys for ${locale}`);
|
|
93
|
-
try {
|
|
94
|
-
translatedValues = await translateKey({
|
|
95
|
-
inputLanguage: defaultLocale,
|
|
96
|
-
outputLanguage: locale,
|
|
97
|
-
context,
|
|
98
|
-
object: keysToTranslate,
|
|
99
|
-
openai,
|
|
100
|
-
model: config.model,
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
catch (error) {
|
|
104
|
-
throw new TranslationError(`Failed to translate keys for locale "${locale}"`, locale, undefined, error instanceof Error ? error : undefined);
|
|
116
|
+
const missingKeysList = Object.keys(allMissingKeys);
|
|
117
|
+
stats.missing = missingKeysList.length;
|
|
118
|
+
if (missingKeysList.length === 0) {
|
|
119
|
+
bar.update(100, { status: chalk.green("ā Up to date") });
|
|
120
|
+
return;
|
|
105
121
|
}
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
const updatedKeys = { ...namespaceKeys[namespace] };
|
|
122
|
+
// Stage 2: Check for existing translations (20-40%)
|
|
123
|
+
bar.update(25, { status: `Checking ${missingKeysList.length} keys...` });
|
|
124
|
+
const keysToTranslate = {};
|
|
125
|
+
const existingTranslations = {};
|
|
126
|
+
const existingTranslationResults = await findExistingTranslations(missingKeysList, namespaces, locale, loadPath, { silent: true });
|
|
127
|
+
bar.update(40, { status: "Processing results..." });
|
|
113
128
|
for (const key of missingKeysList) {
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
129
|
+
const existingValue = existingTranslationResults[key];
|
|
130
|
+
// Use explicit null check instead of truthy check to handle empty string values
|
|
131
|
+
if (existingValue !== null) {
|
|
132
|
+
existingTranslations[key] = existingValue;
|
|
133
|
+
stats.reused++;
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
keysToTranslate[key] = allMissingKeys[key].value;
|
|
118
137
|
}
|
|
119
138
|
}
|
|
120
|
-
|
|
139
|
+
let translatedValues = {};
|
|
140
|
+
// Stage 3: Translate (40-80%)
|
|
141
|
+
if (Object.keys(keysToTranslate).length > 0) {
|
|
142
|
+
const keysCount = Object.keys(keysToTranslate).length;
|
|
143
|
+
bar.update(45, { status: `Translating ${keysCount} keys...` });
|
|
121
144
|
try {
|
|
122
|
-
await
|
|
123
|
-
|
|
124
|
-
|
|
145
|
+
translatedValues = await translateKey({
|
|
146
|
+
inputLanguage: defaultLocale,
|
|
147
|
+
outputLanguage: locale,
|
|
148
|
+
context,
|
|
149
|
+
object: keysToTranslate,
|
|
150
|
+
openai,
|
|
151
|
+
model: config.model,
|
|
152
|
+
});
|
|
153
|
+
stats.translated = Object.keys(translatedValues).length;
|
|
125
154
|
}
|
|
126
155
|
catch (error) {
|
|
127
|
-
|
|
156
|
+
bar.update(100, { status: chalk.red("ā Translation failed") });
|
|
157
|
+
throw new TranslationError(`Failed to translate keys for locale "${locale}"`, locale, undefined, error instanceof Error ? error : undefined);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
bar.update(80, { status: "Saving files..." });
|
|
161
|
+
// Stage 4: Save (80-100%)
|
|
162
|
+
// Combine existing translations with new translations
|
|
163
|
+
const allTranslations = { ...existingTranslations, ...translatedValues };
|
|
164
|
+
// Distribute translations to all relevant namespaces in parallel
|
|
165
|
+
await Promise.all(namespaces.map(async (namespace) => {
|
|
166
|
+
let hasChanges = false;
|
|
167
|
+
const updatedKeys = { ...namespaceKeys[namespace] };
|
|
168
|
+
for (const key of missingKeysList) {
|
|
169
|
+
if (allMissingKeys[key].namespaces.includes(namespace)) {
|
|
170
|
+
const translation = allTranslations[key] || "";
|
|
171
|
+
updatedKeys[key] = translation;
|
|
172
|
+
hasChanges = true;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
if (hasChanges) {
|
|
176
|
+
try {
|
|
177
|
+
await writeLocalesFile(savePath, locale, namespace, updatedKeys);
|
|
178
|
+
}
|
|
179
|
+
catch (error) {
|
|
180
|
+
throw new TranslationError(`Failed to save translations for locale "${locale}" (namespace: ${namespace})`, locale, namespace, error instanceof Error ? error : undefined);
|
|
181
|
+
}
|
|
128
182
|
}
|
|
183
|
+
}));
|
|
184
|
+
// Complete!
|
|
185
|
+
const statusMsg = stats.translated > 0
|
|
186
|
+
? chalk.green(`ā +${stats.translated} translated`)
|
|
187
|
+
: chalk.green(`ā ${stats.reused} reused`);
|
|
188
|
+
bar.update(100, { status: statusMsg });
|
|
189
|
+
}
|
|
190
|
+
catch (error) {
|
|
191
|
+
if (error instanceof TranslationError) {
|
|
192
|
+
throw error;
|
|
129
193
|
}
|
|
130
|
-
|
|
194
|
+
bar.update(100, { status: chalk.red("ā Error") });
|
|
195
|
+
throw error;
|
|
196
|
+
}
|
|
131
197
|
}));
|
|
198
|
+
// Stop the progress bars
|
|
199
|
+
multibar.stop();
|
|
200
|
+
// Print summary
|
|
201
|
+
console.log("");
|
|
202
|
+
console.log(chalk.green("⨠Sync complete!\n"));
|
|
203
|
+
// Show detailed stats
|
|
204
|
+
let totalMissing = 0;
|
|
205
|
+
let totalReused = 0;
|
|
206
|
+
let totalTranslated = 0;
|
|
207
|
+
for (const locale of localesToProcess) {
|
|
208
|
+
const stats = localeStats[locale];
|
|
209
|
+
totalMissing += stats.missing;
|
|
210
|
+
totalReused += stats.reused;
|
|
211
|
+
totalTranslated += stats.translated;
|
|
212
|
+
}
|
|
213
|
+
if (totalMissing > 0) {
|
|
214
|
+
console.log(chalk.dim(" Summary:"));
|
|
215
|
+
console.log(chalk.dim(` ⢠${chalk.white(totalTranslated)} keys translated`));
|
|
216
|
+
console.log(chalk.dim(` ⢠${chalk.white(totalReused)} keys reused from other namespaces`));
|
|
217
|
+
console.log("");
|
|
218
|
+
}
|
|
132
219
|
}
|
|
133
220
|
catch (error) {
|
|
221
|
+
multibar.stop();
|
|
134
222
|
if (error instanceof TranslationError) {
|
|
135
223
|
throw error;
|
|
136
224
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-locales.js","sourceRoot":"","sources":["../../src/commands/sync-locales.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"sync-locales.js","sourceRoot":"","sources":["../../src/commands/sync-locales.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/utils.d.ts
CHANGED
|
@@ -12,7 +12,9 @@ export declare const translateKey: ({ inputLanguage, context, object, openai, ou
|
|
|
12
12
|
model: string;
|
|
13
13
|
openai: OpenAI;
|
|
14
14
|
}) => Promise<Record<string, string>>;
|
|
15
|
-
export declare const loadLocalesFile: (loadPath: string | ((locale: string, namespace: string) => Promise<Record<string, string>>), locale: string, namespace: string
|
|
15
|
+
export declare const loadLocalesFile: (loadPath: string | ((locale: string, namespace: string) => Promise<Record<string, string>>), locale: string, namespace: string, options?: {
|
|
16
|
+
silent?: boolean;
|
|
17
|
+
}) => Promise<Record<string, string>>;
|
|
16
18
|
export declare const writeLocalesFile: (savePath: string | ((locale: string, namespace: string, data: Record<string, string>) => Promise<void>), locale: string, namespace: string, data: Record<string, string>) => Promise<void>;
|
|
17
19
|
export declare const getPureKey: (key: string, namespace?: string, isDefault?: boolean) => string;
|
|
18
20
|
/**
|
|
@@ -49,7 +51,9 @@ export declare const findExistingTranslation: (key: string, namespaces: string[]
|
|
|
49
51
|
/**
|
|
50
52
|
* Find existing translations for multiple keys in parallel
|
|
51
53
|
*/
|
|
52
|
-
export declare const findExistingTranslations: (keys: string[], namespaces: string[], locale: string, loadPath: string | ((locale: string, namespace: string) => Promise<Record<string, string>>)
|
|
54
|
+
export declare const findExistingTranslations: (keys: string[], namespaces: string[], locale: string, loadPath: string | ((locale: string, namespace: string) => Promise<Record<string, string>>), options?: {
|
|
55
|
+
silent?: boolean;
|
|
56
|
+
}) => Promise<Record<string, string | null>>;
|
|
53
57
|
export declare const getTextInput: (key: string, namespaces?: string[]) => Promise<string>;
|
|
54
58
|
export declare const checkAllKeysExist: ({ namespaces, defaultLocale, loadPath, locales, context, openai, savePath, disableTranslationDuringScan, model, }: Configuration) => Promise<void>;
|
|
55
59
|
export declare class TranslationError extends Error {
|
package/dist/lib/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAA;AAGhC,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAElE,eAAO,MAAM,UAAU,GAAU,kBAE9B;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAO,iBAkB9B,CAAA;AAED,wBAAgB,yBAAyB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAE1D;AA0BD,eAAO,MAAM,YAAY,GAAU,oEAOhC;IACD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9B,OAAO,EAAE,MAAM,CAAA;IACf,aAAa,EAAE,MAAM,CAAA;IACrB,cAAc,EAAE,MAAM,CAAA;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf,oCAyDA,CAAA;AAED,eAAO,MAAM,eAAe,GAC1B,UACI,MAAM,GACN,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAC5E,QAAQ,MAAM,EACd,WAAW,MAAM,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"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"}
|