@localheroai/cli 0.0.12 → 0.0.13

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 (34) hide show
  1. package/dist/api/client.js +16 -2
  2. package/dist/api/client.js.map +1 -1
  3. package/dist/api/translation-jobs.js +28 -0
  4. package/dist/api/translation-jobs.js.map +1 -0
  5. package/dist/commands/clone.js +13 -0
  6. package/dist/commands/clone.js.map +1 -1
  7. package/dist/commands/init.js +41 -21
  8. package/dist/commands/init.js.map +1 -1
  9. package/dist/commands/translate.js +20 -2
  10. package/dist/commands/translate.js.map +1 -1
  11. package/dist/types/index.js.map +1 -1
  12. package/dist/utils/config.js +10 -4
  13. package/dist/utils/config.js.map +1 -1
  14. package/dist/utils/files.js +12 -2
  15. package/dist/utils/files.js.map +1 -1
  16. package/dist/utils/import-service.js +42 -5
  17. package/dist/utils/import-service.js.map +1 -1
  18. package/dist/utils/po-surgical.js +707 -0
  19. package/dist/utils/po-surgical.js.map +1 -0
  20. package/dist/utils/po-utils-fallback.js +254 -0
  21. package/dist/utils/po-utils-fallback.js.map +1 -0
  22. package/dist/utils/po-utils.js +232 -0
  23. package/dist/utils/po-utils.js.map +1 -0
  24. package/dist/utils/sync-service.js +13 -5
  25. package/dist/utils/sync-service.js.map +1 -1
  26. package/dist/utils/translation-processor.js +37 -6
  27. package/dist/utils/translation-processor.js.map +1 -1
  28. package/dist/utils/translation-updater/index.js +39 -10
  29. package/dist/utils/translation-updater/index.js.map +1 -1
  30. package/dist/utils/translation-updater/po-handler.js +91 -0
  31. package/dist/utils/translation-updater/po-handler.js.map +1 -0
  32. package/dist/utils/translation-utils.js +35 -3
  33. package/dist/utils/translation-utils.js.map +1 -1
  34. package/package.json +2 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"po-surgical.js","sourceRoot":"","sources":["../../src/utils/po-surgical.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,254 @@
1
+ import { po } from 'gettext-parser';
2
+ import { createUniqueKey, parseUniqueKey, parsePoFile, normalizeStringValue, PLURAL_SUFFIX } from './po-utils.js';
3
+ /**
4
+ * Build a map of msgid_plural values to check for duplicates
5
+ */
6
+ function buildPluralFormsMap(parsed) {
7
+ const pluralForms = new Map();
8
+ Object.entries(parsed.translations).forEach(([context, entries]) => {
9
+ if (typeof entries === 'object' && entries !== null) {
10
+ Object.entries(entries).forEach(([msgid, entry]) => {
11
+ if (msgid === '' || !entry.msgid_plural)
12
+ return;
13
+ // Map the plural form to its context and original msgid
14
+ const pluralKey = createUniqueKey(entry.msgid_plural, context !== '' ? context : undefined);
15
+ pluralForms.set(pluralKey, { context, msgid });
16
+ });
17
+ }
18
+ });
19
+ return pluralForms;
20
+ }
21
+ /**
22
+ * Check if a key is a plural suffix key
23
+ */
24
+ function isPluralKey(key) {
25
+ return key.endsWith(PLURAL_SUFFIX);
26
+ }
27
+ /**
28
+ * Get the base key from a plural suffix key
29
+ */
30
+ function getBaseKeyFromPlural(key) {
31
+ return key.replace(/__plural_\d+$/, '');
32
+ }
33
+ /**
34
+ * Group plural translations together
35
+ */
36
+ function groupPluralTranslations(translations) {
37
+ const regular = {};
38
+ const pluralGroups = new Map();
39
+ // First pass: identify plural pairs
40
+ Object.keys(translations).forEach(key => {
41
+ if (isPluralKey(key)) {
42
+ const baseKey = getBaseKeyFromPlural(key);
43
+ if (translations[baseKey]) {
44
+ // This is a plural pair
45
+ pluralGroups.set(baseKey, {
46
+ singular: translations[baseKey],
47
+ plural: translations[key]
48
+ });
49
+ }
50
+ }
51
+ });
52
+ // Second pass: add regular keys (excluding those in plural pairs)
53
+ Object.entries(translations).forEach(([key, value]) => {
54
+ if (!isPluralKey(key) && !pluralGroups.has(key)) {
55
+ regular[key] = value;
56
+ }
57
+ });
58
+ return { regular, pluralGroups };
59
+ }
60
+ /**
61
+ * Detect the fold length used in the original .po file by analyzing line lengths
62
+ * Returns the detected fold length, or 76 (gettext default) if no clear pattern
63
+ */
64
+ function detectFoldLength(content) {
65
+ const lines = content.split('\n');
66
+ const quotedLines = lines.filter(line => line.trim().startsWith('"') && line.trim().endsWith('"'));
67
+ if (quotedLines.length < 5) {
68
+ return 76; // Use gettext default
69
+ }
70
+ // Check if the file has multiline strings (indicates intentional wrapping)
71
+ const hasMultilineStrings = lines.some(line => line.trim() === 'msgid ""' || line.trim() === 'msgstr ""');
72
+ if (!hasMultilineStrings) {
73
+ return 76; // Use default for simple files
74
+ }
75
+ // Find the longest line length - this represents the wrap point used
76
+ const maxLength = Math.max(...quotedLines.map(line => line.length));
77
+ // If the longest line is in a reasonable range, use it
78
+ // Otherwise fall back to gettext standard
79
+ if (maxLength >= 70 && maxLength <= 100) {
80
+ return maxLength;
81
+ }
82
+ return 76; // gettext default
83
+ }
84
+ /**
85
+ * Old implementation of updatePoFile for fallback when new entries need to be added
86
+ */
87
+ export function updatePoFileOld(originalContent, translations, options) {
88
+ const parsed = po.parse(originalContent);
89
+ const updatedTranslations = new Set();
90
+ const pluralFormsMap = buildPluralFormsMap(parsed);
91
+ let hasChanges = false;
92
+ const { regular, pluralGroups } = groupPluralTranslations(translations);
93
+ Object.entries(parsed.translations).forEach(([context, entries]) => {
94
+ if (typeof entries === 'object' && entries !== null) {
95
+ Object.entries(entries).forEach(([msgid, entry]) => {
96
+ if (msgid === '')
97
+ return; // Skip header
98
+ const uniqueKey = createUniqueKey(msgid, context !== '' ? context : undefined);
99
+ // Check if this is a plural entry (either complete pair or partial)
100
+ if (entry.msgid_plural) {
101
+ const isCompletePair = pluralGroups.has(uniqueKey);
102
+ const hasSingularOnly = regular[uniqueKey];
103
+ if (isCompletePair) {
104
+ const pluralData = pluralGroups.get(uniqueKey);
105
+ const singularValue = pluralData.singular;
106
+ const currentValue = entry.msgstr[0] || '';
107
+ // Skip updating only if this is a source language entry and values match AND current value is not empty
108
+ const skipSingular = (singularValue === msgid && options?.sourceLanguage === options?.targetLanguage && currentValue.trim() !== '');
109
+ if (!skipSingular && currentValue.trim() !== singularValue.trim()) {
110
+ entry.msgstr[0] = singularValue;
111
+ hasChanges = true;
112
+ }
113
+ const pluralValue = pluralData.plural;
114
+ const currentPluralValue = entry.msgstr[1] || '';
115
+ // Skip updating only if this is a source language entry and values match AND current value is not empty
116
+ const skipPlural = (pluralValue === entry.msgid_plural && options?.sourceLanguage === options?.targetLanguage && currentPluralValue.trim() !== '');
117
+ if (!skipPlural && currentPluralValue.trim() !== pluralValue.trim()) {
118
+ entry.msgstr[1] = pluralValue;
119
+ hasChanges = true;
120
+ }
121
+ updatedTranslations.add(uniqueKey);
122
+ updatedTranslations.add(uniqueKey + PLURAL_SUFFIX);
123
+ }
124
+ else if (hasSingularOnly) {
125
+ // Handle partial plural translation (singular only)
126
+ const singularValue = regular[uniqueKey];
127
+ const currentValue = entry.msgstr[0] || '';
128
+ // Skip updating only if this is a source language entry and values match AND current value is not empty
129
+ const skipSingular = (singularValue === msgid && options?.sourceLanguage === options?.targetLanguage && currentValue.trim() !== '');
130
+ if (!skipSingular && currentValue.trim() !== singularValue.trim()) {
131
+ entry.msgstr[0] = singularValue;
132
+ hasChanges = true;
133
+ }
134
+ updatedTranslations.add(uniqueKey);
135
+ }
136
+ }
137
+ else if (regular[uniqueKey]) {
138
+ const newValue = regular[uniqueKey];
139
+ // Skip updating if this is a source language entry (msgid === msgstr)
140
+ if (newValue === msgid && options?.sourceLanguage === options?.targetLanguage) {
141
+ updatedTranslations.add(uniqueKey);
142
+ return;
143
+ }
144
+ const currentValue = normalizeStringValue(entry.msgstr);
145
+ const normalizedNewValue = normalizeStringValue(newValue);
146
+ // Only update if the normalized content is actually different
147
+ // This prevents unnecessary line wrapping changes
148
+ if (currentValue !== normalizedNewValue) {
149
+ entry.msgstr = [newValue];
150
+ hasChanges = true;
151
+ }
152
+ updatedTranslations.add(uniqueKey);
153
+ }
154
+ });
155
+ }
156
+ });
157
+ // Add new translations that weren't found in existing entries
158
+ // But skip plural suffix keys - they should not be added as separate entries
159
+ Object.entries(regular).forEach(([uniqueKey, value]) => {
160
+ if (!updatedTranslations.has(uniqueKey)) {
161
+ const { msgid, context } = parseUniqueKey(uniqueKey);
162
+ const contextKey = context || '';
163
+ // this can happen with malformed keys
164
+ if (!msgid || msgid.trim() === '') {
165
+ return;
166
+ }
167
+ // Skip adding new entries where msgid === msgstr (source language files only)
168
+ if (value === msgid && options?.sourceLanguage === options?.targetLanguage) {
169
+ return;
170
+ }
171
+ // Skip if this msgid is already used as msgid_plural in an existing entry
172
+ if (pluralFormsMap.has(uniqueKey)) {
173
+ return;
174
+ }
175
+ // Initialize context if it doesn't exist
176
+ if (!parsed.translations[contextKey]) {
177
+ parsed.translations[contextKey] = {};
178
+ }
179
+ parsed.translations[contextKey][msgid] = {
180
+ msgid: msgid,
181
+ msgstr: [value]
182
+ };
183
+ hasChanges = true;
184
+ }
185
+ });
186
+ // Add new plural translations that weren't found in existing entries
187
+ pluralGroups.forEach((pluralData, uniqueKey) => {
188
+ if (!updatedTranslations.has(uniqueKey)) {
189
+ const { msgid, context } = parseUniqueKey(uniqueKey);
190
+ const contextKey = context || '';
191
+ // this can happen with malformed keys
192
+ if (!msgid || msgid.trim() === '') {
193
+ return;
194
+ }
195
+ const pluralKey = uniqueKey + PLURAL_SUFFIX;
196
+ // Try to find the proper msgid_plural from the source file if available
197
+ let msgid_plural = pluralData.plural; // fallback
198
+ if (options?.sourceContent) {
199
+ try {
200
+ const sourceParsed = parsePoFile(options.sourceContent);
201
+ const sourceEntries = sourceParsed.entries;
202
+ // Find the matching source entry with msgid_plural
203
+ const sourceEntry = sourceEntries.find(entry => {
204
+ const sourceKey = createUniqueKey(entry.msgid, entry.msgctxt);
205
+ return sourceKey === uniqueKey && entry.msgid_plural;
206
+ });
207
+ if (sourceEntry && sourceEntry.msgid_plural) {
208
+ msgid_plural = sourceEntry.msgid_plural;
209
+ }
210
+ }
211
+ catch (error) {
212
+ // If source parsing fails, continue with fallback
213
+ console.warn('Failed to parse source content for msgid_plural lookup', error);
214
+ }
215
+ }
216
+ // Initialize context if it doesn't exist
217
+ if (!parsed.translations[contextKey]) {
218
+ parsed.translations[contextKey] = {};
219
+ }
220
+ // Create new plural entry with proper msgid_plural
221
+ parsed.translations[contextKey][msgid] = {
222
+ msgid: msgid,
223
+ msgid_plural: msgid_plural,
224
+ msgstr: [pluralData.singular, pluralData.plural]
225
+ };
226
+ hasChanges = true;
227
+ // Mark both keys as updated
228
+ updatedTranslations.add(uniqueKey);
229
+ updatedTranslations.add(pluralKey);
230
+ }
231
+ });
232
+ // If no actual changes were made, return original content to preserve formatting
233
+ if (!hasChanges) {
234
+ return originalContent;
235
+ }
236
+ // Extract header section from original content
237
+ const lines = originalContent.split('\n');
238
+ const headerEndIndex = lines.findIndex((line, index) => index > 0 && line.trim() === '' && lines[index - 1].includes('"'));
239
+ let headerSection = '';
240
+ if (headerEndIndex > 0) {
241
+ headerSection = lines.slice(0, headerEndIndex + 1).join('\n') + '\n';
242
+ }
243
+ // Use detected fold length from original content
244
+ const foldLength = detectFoldLength(originalContent);
245
+ const compiled = po.compile(parsed, { foldLength }).toString();
246
+ const compiledLines = compiled.split('\n');
247
+ const compiledHeaderEndIndex = compiledLines.findIndex((line, index) => index > 0 && line.trim() === '' && compiledLines[index - 1].includes('"'));
248
+ if (headerSection && compiledHeaderEndIndex > 0) {
249
+ const bodySection = compiledLines.slice(compiledHeaderEndIndex + 1).join('\n');
250
+ return headerSection + bodySection;
251
+ }
252
+ return compiled;
253
+ }
254
+ //# sourceMappingURL=po-utils-fallback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"po-utils-fallback.js","sourceRoot":"","sources":["../../src/utils/po-utils-fallback.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,232 @@
1
+ import { po } from 'gettext-parser';
2
+ export const PLURAL_SUFFIX = '__plural_1';
3
+ /**
4
+ * Parse a .po file content and extract entries
5
+ */
6
+ export function parsePoFile(content) {
7
+ const parsed = po.parse(content);
8
+ const headers = parsed.headers || {};
9
+ const entries = [];
10
+ Object.entries(parsed.translations).forEach(([context, translations]) => {
11
+ if (typeof translations === 'object' && translations !== null) {
12
+ Object.entries(translations).forEach(([msgid, entry]) => {
13
+ // Skip the empty header entry that is always present
14
+ if (msgid === '')
15
+ return;
16
+ entries.push({
17
+ msgid,
18
+ msgstr: entry.msgstr || [''],
19
+ msgctxt: context !== '' ? context : undefined,
20
+ msgid_plural: entry.msgid_plural,
21
+ comments: entry.comments
22
+ });
23
+ });
24
+ }
25
+ });
26
+ return { headers, entries };
27
+ }
28
+ /**
29
+ * Create unique key for storage using "context|msgid" format
30
+ */
31
+ export function createUniqueKey(msgid, context) {
32
+ return context ? `${context}|${msgid}` : msgid;
33
+ }
34
+ /**
35
+ * Parse key back to msgid and context
36
+ */
37
+ export function parseUniqueKey(key) {
38
+ const pipeIndex = key.indexOf('|');
39
+ if (pipeIndex === -1) {
40
+ return { msgid: key };
41
+ }
42
+ return {
43
+ context: key.substring(0, pipeIndex),
44
+ msgid: key.substring(pipeIndex + 1)
45
+ };
46
+ }
47
+ /**
48
+ * Convert .po entries to API compatible format
49
+ */
50
+ export function poEntriesToApiFormat(entries, options) {
51
+ const keys = {};
52
+ entries.forEach(entry => {
53
+ const uniqueKey = createUniqueKey(entry.msgid, entry.msgctxt);
54
+ let translatorComments;
55
+ if (entry.comments?.extracted) {
56
+ const extractedComments = Array.isArray(entry.comments.extracted)
57
+ ? entry.comments.extracted
58
+ : [entry.comments.extracted];
59
+ const comments = extractedComments
60
+ .filter((comment) => comment.startsWith('Translators:'))
61
+ .map((comment) => comment.replace(/^Translators:\s*/, '').trim())
62
+ .filter((comment) => comment.length > 0);
63
+ if (comments.length > 0) {
64
+ translatorComments = comments.join(', ');
65
+ }
66
+ }
67
+ if (entry.msgid_plural) {
68
+ const isSourceLanguage = options?.sourceLanguage && options?.currentLanguage &&
69
+ options.sourceLanguage === options.currentLanguage;
70
+ const singularValue = entry.msgstr && entry.msgstr[0] ? entry.msgstr[0] :
71
+ (isSourceLanguage ? entry.msgid : '');
72
+ const singularKeyData = {
73
+ value: singularValue,
74
+ metadata: {
75
+ po_plural: true,
76
+ msgid_plural: entry.msgid_plural,
77
+ plural_index: 0
78
+ }
79
+ };
80
+ if (translatorComments) {
81
+ singularKeyData.metadata.translator_comments = translatorComments;
82
+ }
83
+ if (entry.msgctxt) {
84
+ singularKeyData.context = entry.msgctxt;
85
+ }
86
+ keys[uniqueKey] = singularKeyData;
87
+ // Plural form with special suffix
88
+ const pluralKey = uniqueKey + PLURAL_SUFFIX;
89
+ const pluralValue = entry.msgstr && entry.msgstr[1] ? entry.msgstr[1] :
90
+ (isSourceLanguage ? entry.msgid_plural : '');
91
+ const pluralKeyData = {
92
+ value: pluralValue,
93
+ metadata: {
94
+ po_plural: true,
95
+ msgid: entry.msgid,
96
+ plural_index: 1
97
+ }
98
+ };
99
+ // Include translator comments in plural metadata
100
+ if (translatorComments) {
101
+ pluralKeyData.metadata.translator_comments = translatorComments;
102
+ }
103
+ if (entry.msgctxt) {
104
+ pluralKeyData.context = entry.msgctxt;
105
+ }
106
+ keys[pluralKey] = pluralKeyData;
107
+ }
108
+ else {
109
+ // Handle regular (non-plural) entries
110
+ const isSourceLanguage = options?.sourceLanguage && options?.currentLanguage &&
111
+ options.sourceLanguage === options.currentLanguage;
112
+ const value = entry.msgstr && entry.msgstr[0] ? entry.msgstr[0] :
113
+ (isSourceLanguage ? entry.msgid : '');
114
+ const keyData = {
115
+ value: value
116
+ };
117
+ if (translatorComments) {
118
+ keyData.metadata = translatorComments;
119
+ }
120
+ if (entry.msgctxt) {
121
+ keyData.context = entry.msgctxt;
122
+ }
123
+ keys[uniqueKey] = keyData;
124
+ }
125
+ });
126
+ return keys;
127
+ }
128
+ /**
129
+ * Create .po file content
130
+ */
131
+ export function createPoFile(entries, headers) {
132
+ const poData = {
133
+ headers: headers || {
134
+ 'Content-Type': 'text/plain; charset=UTF-8',
135
+ 'Language': 'en'
136
+ },
137
+ translations: {}
138
+ };
139
+ // Group entries by context
140
+ entries.forEach(entry => {
141
+ const context = entry.msgctxt || '';
142
+ if (!poData.translations[context]) {
143
+ poData.translations[context] = {};
144
+ }
145
+ const translationEntry = {
146
+ msgstr: entry.msgstr
147
+ };
148
+ if (entry.msgid_plural) {
149
+ translationEntry.msgid_plural = entry.msgid_plural;
150
+ }
151
+ if (entry.comments) {
152
+ translationEntry.comments = entry.comments;
153
+ }
154
+ poData.translations[context][entry.msgid] = translationEntry;
155
+ });
156
+ // For new files, disable folding to avoid arbitrary line breaks
157
+ return po.compile(poData, { foldLength: 0 }).toString();
158
+ }
159
+ export function findMissingPoTranslations(sourceContent, targetContent) {
160
+ const sourceEntries = parsePoFile(sourceContent).entries;
161
+ const targetEntries = parsePoFile(targetContent).entries;
162
+ const targetMap = new Map();
163
+ targetEntries.forEach(entry => {
164
+ const key = createUniqueKey(entry.msgid, entry.msgctxt);
165
+ targetMap.set(key, entry);
166
+ });
167
+ const missing = [];
168
+ sourceEntries.forEach(entry => {
169
+ const key = createUniqueKey(entry.msgid, entry.msgctxt);
170
+ const targetEntry = targetMap.get(key);
171
+ if (entry.msgid_plural) {
172
+ // Handle plural entries - check both singular and plural forms
173
+ // Check singular form (msgstr[0])
174
+ const singularEmpty = !targetEntry ||
175
+ !targetEntry.msgstr ||
176
+ !targetEntry.msgstr[0] ||
177
+ targetEntry.msgstr[0].trim() === '';
178
+ if (singularEmpty) {
179
+ missing.push({
180
+ key: entry.msgid,
181
+ context: entry.msgctxt,
182
+ value: entry.msgid,
183
+ isPlural: true,
184
+ pluralForm: entry.msgid_plural
185
+ });
186
+ }
187
+ // Check plural form (msgstr[1]) - use the __plural_1 suffix to match our key structure
188
+ const pluralEmpty = !targetEntry ||
189
+ !targetEntry.msgstr ||
190
+ !targetEntry.msgstr[1] ||
191
+ targetEntry.msgstr[1].trim() === '';
192
+ if (pluralEmpty) {
193
+ const pluralKey = key + PLURAL_SUFFIX;
194
+ missing.push({
195
+ key: pluralKey,
196
+ context: entry.msgctxt,
197
+ value: entry.msgid_plural,
198
+ isPlural: true,
199
+ pluralForm: entry.msgid_plural
200
+ });
201
+ }
202
+ }
203
+ else {
204
+ // Handle regular (non-plural) entries
205
+ const isEmpty = !targetEntry ||
206
+ !targetEntry.msgstr ||
207
+ !targetEntry.msgstr[0] ||
208
+ targetEntry.msgstr[0].trim() === '';
209
+ if (isEmpty) {
210
+ missing.push({
211
+ key: entry.msgid,
212
+ context: entry.msgctxt,
213
+ value: entry.msgid,
214
+ isPlural: false,
215
+ pluralForm: entry.msgid_plural
216
+ });
217
+ }
218
+ }
219
+ });
220
+ return missing;
221
+ }
222
+ /**
223
+ * Normalize a string value by joining multiline parts and trimming
224
+ * This handles cases where gettext line wrapping differs but content is identical
225
+ */
226
+ export function normalizeStringValue(value) {
227
+ if (Array.isArray(value)) {
228
+ return value.join('').trim();
229
+ }
230
+ return (value || '').trim();
231
+ }
232
+ //# sourceMappingURL=po-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"po-utils.js","sourceRoot":"","sources":["../../src/utils/po-utils.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@ import { getUpdates } from '../api/translations.js';
4
4
  import { updateTranslationFile, deleteKeysFromTranslationFile } from './translation-updater/index.js';
5
5
  import { findTranslationFiles } from './files.js';
6
6
  import path from 'path';
7
- const MAX_PAGES = 100;
7
+ const MAX_PAGES = parseInt(process.env.LOCALHERO_MAX_PAGES || '500');
8
8
  export const syncService = {
9
9
  /**
10
10
  * Check for updates since the last sync
@@ -34,12 +34,17 @@ export const syncService = {
34
34
  deletedKeys = deletedKeys.concat(response.updates.deleted_keys);
35
35
  }
36
36
  if (response.pagination) {
37
- const { current_page, total_pages } = response.pagination;
37
+ const { current_page, total_pages, items_per_page } = response.pagination;
38
38
  hasMorePages = current_page < total_pages;
39
39
  currentPage++;
40
40
  if (verbose && hasMorePages) {
41
41
  if (total_pages > MAX_PAGES) {
42
- console.log(chalk.yellow(` ⚠️ Limiting to ${MAX_PAGES} pages out of ${total_pages} total`));
42
+ const itemsPerPage = items_per_page || 100;
43
+ const totalItems = total_pages * itemsPerPage;
44
+ const limitedItems = MAX_PAGES * itemsPerPage;
45
+ // Debug: Log what API is returning
46
+ console.log(chalk.gray(` Debug: API returned total_pages=${total_pages}, items_per_page=${items_per_page}`));
47
+ console.log(chalk.yellow(` ⚠️ Limited to ${MAX_PAGES}/${total_pages} pages (${limitedItems.toLocaleString()}/${totalItems.toLocaleString()} updates). Use LOCALHERO_MAX_PAGES=${total_pages} to get all.`));
43
48
  }
44
49
  else {
45
50
  console.log(chalk.gray(` Fetching page ${currentPage} of ${total_pages}`));
@@ -50,6 +55,9 @@ export const syncService = {
50
55
  hasMorePages = false;
51
56
  }
52
57
  }
58
+ if (currentPage > MAX_PAGES && hasMorePages && verbose) {
59
+ console.warn(chalk.yellow(`⚠️ Reached page limit (${MAX_PAGES}), some translations skipped. Use LOCALHERO_MAX_PAGES=${MAX_PAGES * 2} to increase.`));
60
+ }
53
61
  if (!allFiles.length && !deletedKeys.length) {
54
62
  return { hasUpdates: false };
55
63
  }
@@ -105,8 +113,8 @@ export const syncService = {
105
113
  }
106
114
  }
107
115
  try {
108
- await updateTranslationFile(file.path, translations, lang.code, sourceFilePath);
109
- totalUpdates += Object.keys(translations).length;
116
+ const updateResult = await updateTranslationFile(file.path, translations, lang.code, sourceFilePath, config.sourceLocale, config);
117
+ totalUpdates += updateResult.updatedKeys.length;
110
118
  }
111
119
  catch (error) {
112
120
  console.error(chalk.yellow(`⚠️ Failed to update ${file.path}: ${error.message}`));