i18next-cli 1.47.7 → 1.47.8

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/cjs/cli.js CHANGED
@@ -31,7 +31,7 @@ const program = new commander.Command();
31
31
  program
32
32
  .name('i18next-cli')
33
33
  .description('A unified, high-performance i18next CLI.')
34
- .version('1.47.7'); // This string is replaced with the actual version at build time by rollup
34
+ .version('1.47.8'); // This string is replaced with the actual version at build time by rollup
35
35
  // new: global config override option
36
36
  program.option('-c, --config <path>', 'Path to i18next-cli config file (overrides detection)');
37
37
  program
@@ -454,12 +454,41 @@ function addComponentFromFunctionNode(name, fnNode, content, components) {
454
454
  // Non-translatable JSX attributes are defined in utils/jsx-attributes.ts
455
455
  // and shared with the linter. The instrumenter uses `ignoredAttributeSet`
456
456
  // to skip recursing into non-translatable attribute values.
457
+ /**
458
+ * Returns true when the AST node is a `t(...)` or `i18next.t(...)` call
459
+ * expression — i.e. code that was already instrumented.
460
+ */
461
+ function isTranslationCall(node) {
462
+ const callee = node.callee;
463
+ if (!callee)
464
+ return false;
465
+ // t(...)
466
+ if (callee.type === 'Identifier' && callee.value === 't')
467
+ return true;
468
+ // i18next.t(...)
469
+ if (callee.type === 'MemberExpression' &&
470
+ !callee.computed &&
471
+ callee.property?.type === 'Identifier' &&
472
+ callee.property.value === 't' &&
473
+ callee.object?.type === 'Identifier' &&
474
+ callee.object.value === 'i18next')
475
+ return true;
476
+ return false;
477
+ }
457
478
  /**
458
479
  * Recursively visits AST nodes to find string literals.
459
480
  */
460
481
  function visitNodeForStrings(node, content, file, config, candidates) {
461
482
  if (!node)
462
483
  return;
484
+ // Skip already-instrumented t() / i18next.t() calls entirely so that
485
+ // strings inside the options object (defaultValue_one, etc.) are not
486
+ // picked up as new candidates on a second run.
487
+ if (node.type === 'CallExpression' && isTranslationCall(node))
488
+ return;
489
+ // Skip <Trans> elements (already instrumented)
490
+ if (node.type === 'JSXElement' && isTransComponent(node))
491
+ return;
463
492
  // Skip non-translatable JSX attributes entirely (e.g. className={...})
464
493
  if (node.type === 'JSXAttribute') {
465
494
  const nameNode = node.name;
@@ -633,6 +662,9 @@ function resolveExpressionName(expr, content, usedNames) {
633
662
  function detectJSXInterpolation(node, content, file, config, candidates) {
634
663
  if (!node)
635
664
  return;
665
+ // Skip <Trans> elements (already instrumented)
666
+ if (node.type === 'JSXElement' && isTransComponent(node))
667
+ return;
636
668
  const children = (node.type === 'JSXElement' || node.type === 'JSXFragment') ? node.children : null;
637
669
  if (children?.length > 1) {
638
670
  // Build "runs" of consecutive JSXText + simple-expression containers
@@ -651,6 +683,10 @@ function detectJSXInterpolation(node, content, file, config, candidates) {
651
683
  // Plural ternary expression — include in the run for merged handling
652
684
  currentRun.push(child);
653
685
  }
686
+ else if (child.type === 'JSXElement' && isSimpleJSXElement(child)) {
687
+ // Simple HTML element — include in the run for Trans detection
688
+ currentRun.push(child);
689
+ }
654
690
  else {
655
691
  // JSXElement, complex expression, etc. — break the run
656
692
  if (currentRun.length > 0) {
@@ -665,7 +701,11 @@ function detectJSXInterpolation(node, content, file, config, candidates) {
665
701
  for (const run of runs) {
666
702
  const hasText = run.some(c => c.type === 'JSXText' && c.value?.trim());
667
703
  const hasExpr = run.some(c => c.type === 'JSXExpressionContainer');
668
- if (!hasText || !hasExpr || run.length < 2)
704
+ const hasElement = run.some(c => c.type === 'JSXElement');
705
+ // Require at least one text node plus either an expression or element
706
+ if (!hasText || run.length < 2)
707
+ continue;
708
+ if (!hasExpr && !hasElement)
669
709
  continue;
670
710
  // Check if any expression container in this run is a plural ternary
671
711
  let pluralChild = null;
@@ -681,7 +721,77 @@ function detectJSXInterpolation(node, content, file, config, candidates) {
681
721
  }
682
722
  }
683
723
  }
684
- if (pluralChild && pluralData) {
724
+ if (hasElement) {
725
+ // ── JSX sibling run with nested HTML elements → <Trans> ──
726
+ const spanStart = run[0].span.start;
727
+ const spanEnd = run[run.length - 1].span.end;
728
+ // Build the translation string (with indexed tags) and text-only version (for scoring)
729
+ const usedNames = new Set();
730
+ const interpolations = [];
731
+ let transValue = '';
732
+ let textOnly = '';
733
+ let transContent = '';
734
+ let childIndex = 0;
735
+ let valid = true;
736
+ for (const child of run) {
737
+ if (child.type === 'JSXText') {
738
+ const raw = content.slice(child.span.start, child.span.end);
739
+ transValue += raw;
740
+ textOnly += raw;
741
+ transContent += raw;
742
+ childIndex++;
743
+ }
744
+ else if (child.type === 'JSXExpressionContainer') {
745
+ const info = resolveExpressionName(child.expression, content, usedNames);
746
+ if (!info) {
747
+ valid = false;
748
+ break;
749
+ }
750
+ transValue += `{{${info.name}}}`;
751
+ textOnly += info.name;
752
+ // In <Trans> children, simple expressions become {{ obj }} syntax
753
+ const objExpr = info.name === info.expression ? info.name : `${info.name}: ${info.expression}`;
754
+ transContent += `{{ ${objExpr} }}`;
755
+ interpolations.push(info);
756
+ childIndex++;
757
+ }
758
+ else if (child.type === 'JSXElement') {
759
+ const innerText = getJSXElementTextContent(child, content);
760
+ transValue += `<${childIndex}>${innerText}</${childIndex}>`;
761
+ textOnly += innerText;
762
+ // Keep the original JSX element source for the <Trans> children
763
+ transContent += content.slice(child.span.start, child.span.end);
764
+ childIndex++;
765
+ }
766
+ }
767
+ if (!valid)
768
+ continue;
769
+ const trimmedText = textOnly.trim();
770
+ const trimmedTransValue = transValue.trim();
771
+ if (!trimmedText || !trimmedTransValue)
772
+ continue;
773
+ const candidate = stringDetector.detectCandidate(trimmedText, spanStart, spanEnd, file, content, config);
774
+ if (candidate) {
775
+ candidate.type = 'jsx-mixed';
776
+ candidate.content = transContent.trim();
777
+ candidate.transValue = trimmedTransValue;
778
+ if (interpolations.length > 0) {
779
+ candidate.interpolations = interpolations;
780
+ }
781
+ // Mixed text + elements in JSX is almost always user-facing
782
+ candidate.confidence = Math.min(1, candidate.confidence + 0.25);
783
+ if (candidate.confidence >= 0.7) {
784
+ // Remove individual candidates that overlap with the merged span
785
+ for (let i = candidates.length - 1; i >= 0; i--) {
786
+ if (candidates[i].offset >= spanStart && candidates[i].endOffset <= spanEnd) {
787
+ candidates.splice(i, 1);
788
+ }
789
+ }
790
+ candidates.push(candidate);
791
+ }
792
+ }
793
+ }
794
+ else if (pluralChild && pluralData) {
685
795
  // ── JSX sibling run with embedded plural ternary ──
686
796
  const countExpr = pluralData.countExpression;
687
797
  // Resolve names for non-count, non-plural expressions
@@ -768,7 +878,7 @@ function detectJSXInterpolation(node, content, file, config, candidates) {
768
878
  }
769
879
  }
770
880
  else {
771
- // ── Original JSX sibling merging (no plural) ──
881
+ // ── Original JSX sibling merging (text + expressions, no elements) ──
772
882
  // Build the interpolated text from the run
773
883
  const usedNames = new Set();
774
884
  const interpolations = [];
@@ -841,6 +951,59 @@ function isSimpleJSXExpression(expr) {
841
951
  return true;
842
952
  return false;
843
953
  }
954
+ /**
955
+ * Returns true when a JSXElement is "simple" enough to be included in a
956
+ * `<Trans>` JSX sibling run. Accepts:
957
+ * - Self-closing elements (`<br />`, `<img />`)
958
+ * - Elements whose only children are `JSXText` nodes
959
+ * Only HTML-like elements (lowercase tag name) are accepted; React
960
+ * components (uppercase, e.g. `<Button />`) break the run.
961
+ */
962
+ function isSimpleJSXElement(node) {
963
+ if (node.type !== 'JSXElement')
964
+ return false;
965
+ const namePart = node.opening?.name;
966
+ if (!namePart)
967
+ return false;
968
+ // Only include HTML-like elements (lowercase first char)
969
+ let tagName = null;
970
+ if (namePart.type === 'Identifier') {
971
+ tagName = namePart.value;
972
+ }
973
+ if (!tagName || tagName[0] !== tagName[0].toLowerCase())
974
+ return false;
975
+ // Self-closing elements are simple
976
+ if (node.opening?.selfClosing)
977
+ return true;
978
+ // Elements with only text children (or empty) are simple
979
+ const children = node.children || [];
980
+ return children.length === 0 || children.every((c) => c.type === 'JSXText');
981
+ }
982
+ /**
983
+ * Returns the text content of a simple JSXElement's children.
984
+ */
985
+ function getJSXElementTextContent(node, content) {
986
+ const children = node.children || [];
987
+ return children
988
+ .filter((c) => c.type === 'JSXText')
989
+ .map((c) => content.slice(c.span.start, c.span.end))
990
+ .join('');
991
+ }
992
+ /**
993
+ * Returns true when a JSXElement is a `<Trans>` component
994
+ * (already instrumented content).
995
+ */
996
+ function isTransComponent(node) {
997
+ const opening = node.opening;
998
+ if (!opening)
999
+ return false;
1000
+ const name = opening.name;
1001
+ if (name?.type === 'Identifier' && name.value === 'Trans')
1002
+ return true;
1003
+ if (name?.type === 'JSXMemberExpression' && name.property?.type === 'Identifier' && name.property.value === 'Trans')
1004
+ return true;
1005
+ return false;
1006
+ }
844
1007
  // ─── Plural conditional pattern detection ────────────────────────────────────
845
1008
  /**
846
1009
  * Extracts the text value from a string literal or static template literal node.
@@ -1565,7 +1728,7 @@ async function writeExtractedKeys(candidates, config, namespace, logger$1 = new
1565
1728
  translations[`${candidate.key}_other`] = pf.other;
1566
1729
  }
1567
1730
  else {
1568
- translations[candidate.key] = candidate.content;
1731
+ translations[candidate.key] = candidate.transValue ?? candidate.content;
1569
1732
  }
1570
1733
  }
1571
1734
  }
@@ -29,6 +29,7 @@ function transformFile(content, file, candidates, options) {
29
29
  const transformedComponents = new Set();
30
30
  let hasComponentCandidates = false;
31
31
  let hasNonComponentCandidates = false;
32
+ let hasTransCandidates = false;
32
33
  // ── Language-change site injections ────────────────────────────────────
33
34
  const languageChangeSites = options.languageChangeSites || [];
34
35
  // Track components that need `i18n` from useTranslation()
@@ -82,9 +83,15 @@ function transformFile(content, file, candidates, options) {
82
83
  if (replacement) {
83
84
  s.overwrite(candidate.offset, candidate.endOffset, replacement);
84
85
  transformCount++;
86
+ if (candidate.type === 'jsx-mixed') {
87
+ hasTransCandidates = true;
88
+ }
85
89
  if (candidate.insideComponent) {
86
- transformedComponents.add(candidate.insideComponent);
87
- hasComponentCandidates = true;
90
+ // jsx-mixed candidates use <Trans>, not t(), so they don't need useTranslation
91
+ if (candidate.type !== 'jsx-mixed') {
92
+ transformedComponents.add(candidate.insideComponent);
93
+ hasComponentCandidates = true;
94
+ }
88
95
  }
89
96
  else {
90
97
  hasNonComponentCandidates = true;
@@ -108,17 +115,20 @@ function transformFile(content, file, candidates, options) {
108
115
  const indent = detectIndent(content, comp.bodyStart);
109
116
  const defaultNS = options.config.extract?.defaultNS ?? 'translation';
110
117
  const nsArg = (options.namespace && options.namespace !== defaultNS) ? `'${options.namespace}'` : '';
111
- // Build destructuring: include `t` if the component has string candidates,
118
+ // Build destructuring: include `t` if the component has string candidates
119
+ // (but not jsx-mixed which use <Trans>),
112
120
  // include `i18n` if the component has language-change sites.
113
- const needsT = highConfidenceCandidates.some(c => c.insideComponent === comp.name);
121
+ const needsT = highConfidenceCandidates.some(c => c.insideComponent === comp.name && c.type !== 'jsx-mixed');
114
122
  const needsI18n = componentsNeedingI18n.has(comp.name);
115
123
  const parts = [];
116
124
  if (needsT)
117
125
  parts.push('t');
118
126
  if (needsI18n)
119
127
  parts.push('i18n');
120
- if (parts.length === 0)
121
- parts.push('t'); // fallback
128
+ // Skip if component needs neither t nor i18n
129
+ // (e.g. component only has jsx-mixed / <Trans> candidates)
130
+ if (!needsT && !needsI18n)
131
+ continue;
122
132
  const destructured = `{ ${parts.join(', ')} }`;
123
133
  s.appendRight(comp.bodyStart + 1, `\n${indent}const ${destructured} = useTranslation(${nsArg})`);
124
134
  injections.hookInjected = true;
@@ -148,7 +158,8 @@ function transformFile(content, file, candidates, options) {
148
158
  // Add import statements
149
159
  addImportStatements(s, content, {
150
160
  needsUseTranslation: hasComponentCandidates && options.hasReact,
151
- needsI18next: hasNonComponentCandidates || !options.hasReact
161
+ needsI18next: hasNonComponentCandidates || !options.hasReact,
162
+ needsTrans: hasTransCandidates && options.hasReact
152
163
  });
153
164
  injections.importAdded = true;
154
165
  }
@@ -232,7 +243,8 @@ function buildReplacement(candidate, key, useHookStyle, namespace) {
232
243
  return `{${tCall}}`;
233
244
  case 'jsx-mixed':
234
245
  if (useHookStyle) {
235
- return `<Trans i18nKey="${key}">${candidate.content}</Trans>`;
246
+ const nsAttr = namespace ? ` ns="${namespace}"` : '';
247
+ return `<Trans i18nKey="${key}"${nsAttr}>${candidate.content}</Trans>`;
236
248
  }
237
249
  return candidate.content;
238
250
  case 'template-literal':
@@ -286,12 +298,24 @@ function detectIndent(content, braceOffset) {
286
298
  return ' ';
287
299
  }
288
300
  /**
289
- * Adds necessary import statements (useTranslation and/or i18next).
301
+ * Adds necessary import statements (useTranslation, Trans, and/or i18next).
290
302
  */
291
303
  function addImportStatements(s, content, needs) {
292
304
  let importStatement = '';
293
- if (needs.needsUseTranslation && !hasImport(content, 'react-i18next')) {
294
- importStatement += "import { useTranslation } from 'react-i18next'\n";
305
+ // Build a combined react-i18next import
306
+ const reactI18nextImports = [];
307
+ if (needs.needsUseTranslation)
308
+ reactI18nextImports.push('useTranslation');
309
+ if (needs.needsTrans)
310
+ reactI18nextImports.push('Trans');
311
+ if (reactI18nextImports.length > 0) {
312
+ if (!hasImport(content, 'react-i18next')) {
313
+ importStatement += `import { ${reactI18nextImports.join(', ')} } from 'react-i18next'\n`;
314
+ }
315
+ else {
316
+ // react-i18next is already imported — augment with any missing named exports
317
+ augmentReactI18nextImport(s, content, reactI18nextImports);
318
+ }
295
319
  }
296
320
  if (needs.needsI18next && !hasImport(content, 'i18next')) {
297
321
  importStatement += "import i18next from 'i18next'\n";
@@ -316,6 +340,24 @@ function addImportStatements(s, content, needs) {
316
340
  }
317
341
  s.appendRight(insertPos, importStatement);
318
342
  }
343
+ /**
344
+ * Augments an existing `import { ... } from 'react-i18next'` with any missing
345
+ * named exports (e.g. adds `Trans` when only `useTranslation` is imported).
346
+ */
347
+ function augmentReactI18nextImport(s, content, needed) {
348
+ const importMatch = /import\s*\{([^}]*)\}\s*from\s*['"]react-i18next['"]/.exec(content);
349
+ if (!importMatch)
350
+ return;
351
+ const existingImports = importMatch[1].split(',').map(x => x.trim()).filter(Boolean);
352
+ const toAdd = needed.filter(n => !existingImports.includes(n));
353
+ if (toAdd.length === 0)
354
+ return;
355
+ const newImports = [...existingImports, ...toAdd].join(', ');
356
+ const newImportStatement = `import { ${newImports} } from 'react-i18next'`;
357
+ const matchStart = importMatch.index;
358
+ const matchEnd = matchStart + importMatch[0].length;
359
+ s.overwrite(matchStart, matchEnd, newImportStatement);
360
+ }
319
361
  /**
320
362
  * Generates a unified diff showing what changed.
321
363
  */
package/dist/esm/cli.js CHANGED
@@ -29,7 +29,7 @@ const program = new Command();
29
29
  program
30
30
  .name('i18next-cli')
31
31
  .description('A unified, high-performance i18next CLI.')
32
- .version('1.47.7'); // This string is replaced with the actual version at build time by rollup
32
+ .version('1.47.8'); // This string is replaced with the actual version at build time by rollup
33
33
  // new: global config override option
34
34
  program.option('-c, --config <path>', 'Path to i18next-cli config file (overrides detection)');
35
35
  program
@@ -452,12 +452,41 @@ function addComponentFromFunctionNode(name, fnNode, content, components) {
452
452
  // Non-translatable JSX attributes are defined in utils/jsx-attributes.ts
453
453
  // and shared with the linter. The instrumenter uses `ignoredAttributeSet`
454
454
  // to skip recursing into non-translatable attribute values.
455
+ /**
456
+ * Returns true when the AST node is a `t(...)` or `i18next.t(...)` call
457
+ * expression — i.e. code that was already instrumented.
458
+ */
459
+ function isTranslationCall(node) {
460
+ const callee = node.callee;
461
+ if (!callee)
462
+ return false;
463
+ // t(...)
464
+ if (callee.type === 'Identifier' && callee.value === 't')
465
+ return true;
466
+ // i18next.t(...)
467
+ if (callee.type === 'MemberExpression' &&
468
+ !callee.computed &&
469
+ callee.property?.type === 'Identifier' &&
470
+ callee.property.value === 't' &&
471
+ callee.object?.type === 'Identifier' &&
472
+ callee.object.value === 'i18next')
473
+ return true;
474
+ return false;
475
+ }
455
476
  /**
456
477
  * Recursively visits AST nodes to find string literals.
457
478
  */
458
479
  function visitNodeForStrings(node, content, file, config, candidates) {
459
480
  if (!node)
460
481
  return;
482
+ // Skip already-instrumented t() / i18next.t() calls entirely so that
483
+ // strings inside the options object (defaultValue_one, etc.) are not
484
+ // picked up as new candidates on a second run.
485
+ if (node.type === 'CallExpression' && isTranslationCall(node))
486
+ return;
487
+ // Skip <Trans> elements (already instrumented)
488
+ if (node.type === 'JSXElement' && isTransComponent(node))
489
+ return;
461
490
  // Skip non-translatable JSX attributes entirely (e.g. className={...})
462
491
  if (node.type === 'JSXAttribute') {
463
492
  const nameNode = node.name;
@@ -631,6 +660,9 @@ function resolveExpressionName(expr, content, usedNames) {
631
660
  function detectJSXInterpolation(node, content, file, config, candidates) {
632
661
  if (!node)
633
662
  return;
663
+ // Skip <Trans> elements (already instrumented)
664
+ if (node.type === 'JSXElement' && isTransComponent(node))
665
+ return;
634
666
  const children = (node.type === 'JSXElement' || node.type === 'JSXFragment') ? node.children : null;
635
667
  if (children?.length > 1) {
636
668
  // Build "runs" of consecutive JSXText + simple-expression containers
@@ -649,6 +681,10 @@ function detectJSXInterpolation(node, content, file, config, candidates) {
649
681
  // Plural ternary expression — include in the run for merged handling
650
682
  currentRun.push(child);
651
683
  }
684
+ else if (child.type === 'JSXElement' && isSimpleJSXElement(child)) {
685
+ // Simple HTML element — include in the run for Trans detection
686
+ currentRun.push(child);
687
+ }
652
688
  else {
653
689
  // JSXElement, complex expression, etc. — break the run
654
690
  if (currentRun.length > 0) {
@@ -663,7 +699,11 @@ function detectJSXInterpolation(node, content, file, config, candidates) {
663
699
  for (const run of runs) {
664
700
  const hasText = run.some(c => c.type === 'JSXText' && c.value?.trim());
665
701
  const hasExpr = run.some(c => c.type === 'JSXExpressionContainer');
666
- if (!hasText || !hasExpr || run.length < 2)
702
+ const hasElement = run.some(c => c.type === 'JSXElement');
703
+ // Require at least one text node plus either an expression or element
704
+ if (!hasText || run.length < 2)
705
+ continue;
706
+ if (!hasExpr && !hasElement)
667
707
  continue;
668
708
  // Check if any expression container in this run is a plural ternary
669
709
  let pluralChild = null;
@@ -679,7 +719,77 @@ function detectJSXInterpolation(node, content, file, config, candidates) {
679
719
  }
680
720
  }
681
721
  }
682
- if (pluralChild && pluralData) {
722
+ if (hasElement) {
723
+ // ── JSX sibling run with nested HTML elements → <Trans> ──
724
+ const spanStart = run[0].span.start;
725
+ const spanEnd = run[run.length - 1].span.end;
726
+ // Build the translation string (with indexed tags) and text-only version (for scoring)
727
+ const usedNames = new Set();
728
+ const interpolations = [];
729
+ let transValue = '';
730
+ let textOnly = '';
731
+ let transContent = '';
732
+ let childIndex = 0;
733
+ let valid = true;
734
+ for (const child of run) {
735
+ if (child.type === 'JSXText') {
736
+ const raw = content.slice(child.span.start, child.span.end);
737
+ transValue += raw;
738
+ textOnly += raw;
739
+ transContent += raw;
740
+ childIndex++;
741
+ }
742
+ else if (child.type === 'JSXExpressionContainer') {
743
+ const info = resolveExpressionName(child.expression, content, usedNames);
744
+ if (!info) {
745
+ valid = false;
746
+ break;
747
+ }
748
+ transValue += `{{${info.name}}}`;
749
+ textOnly += info.name;
750
+ // In <Trans> children, simple expressions become {{ obj }} syntax
751
+ const objExpr = info.name === info.expression ? info.name : `${info.name}: ${info.expression}`;
752
+ transContent += `{{ ${objExpr} }}`;
753
+ interpolations.push(info);
754
+ childIndex++;
755
+ }
756
+ else if (child.type === 'JSXElement') {
757
+ const innerText = getJSXElementTextContent(child, content);
758
+ transValue += `<${childIndex}>${innerText}</${childIndex}>`;
759
+ textOnly += innerText;
760
+ // Keep the original JSX element source for the <Trans> children
761
+ transContent += content.slice(child.span.start, child.span.end);
762
+ childIndex++;
763
+ }
764
+ }
765
+ if (!valid)
766
+ continue;
767
+ const trimmedText = textOnly.trim();
768
+ const trimmedTransValue = transValue.trim();
769
+ if (!trimmedText || !trimmedTransValue)
770
+ continue;
771
+ const candidate = detectCandidate(trimmedText, spanStart, spanEnd, file, content, config);
772
+ if (candidate) {
773
+ candidate.type = 'jsx-mixed';
774
+ candidate.content = transContent.trim();
775
+ candidate.transValue = trimmedTransValue;
776
+ if (interpolations.length > 0) {
777
+ candidate.interpolations = interpolations;
778
+ }
779
+ // Mixed text + elements in JSX is almost always user-facing
780
+ candidate.confidence = Math.min(1, candidate.confidence + 0.25);
781
+ if (candidate.confidence >= 0.7) {
782
+ // Remove individual candidates that overlap with the merged span
783
+ for (let i = candidates.length - 1; i >= 0; i--) {
784
+ if (candidates[i].offset >= spanStart && candidates[i].endOffset <= spanEnd) {
785
+ candidates.splice(i, 1);
786
+ }
787
+ }
788
+ candidates.push(candidate);
789
+ }
790
+ }
791
+ }
792
+ else if (pluralChild && pluralData) {
683
793
  // ── JSX sibling run with embedded plural ternary ──
684
794
  const countExpr = pluralData.countExpression;
685
795
  // Resolve names for non-count, non-plural expressions
@@ -766,7 +876,7 @@ function detectJSXInterpolation(node, content, file, config, candidates) {
766
876
  }
767
877
  }
768
878
  else {
769
- // ── Original JSX sibling merging (no plural) ──
879
+ // ── Original JSX sibling merging (text + expressions, no elements) ──
770
880
  // Build the interpolated text from the run
771
881
  const usedNames = new Set();
772
882
  const interpolations = [];
@@ -839,6 +949,59 @@ function isSimpleJSXExpression(expr) {
839
949
  return true;
840
950
  return false;
841
951
  }
952
+ /**
953
+ * Returns true when a JSXElement is "simple" enough to be included in a
954
+ * `<Trans>` JSX sibling run. Accepts:
955
+ * - Self-closing elements (`<br />`, `<img />`)
956
+ * - Elements whose only children are `JSXText` nodes
957
+ * Only HTML-like elements (lowercase tag name) are accepted; React
958
+ * components (uppercase, e.g. `<Button />`) break the run.
959
+ */
960
+ function isSimpleJSXElement(node) {
961
+ if (node.type !== 'JSXElement')
962
+ return false;
963
+ const namePart = node.opening?.name;
964
+ if (!namePart)
965
+ return false;
966
+ // Only include HTML-like elements (lowercase first char)
967
+ let tagName = null;
968
+ if (namePart.type === 'Identifier') {
969
+ tagName = namePart.value;
970
+ }
971
+ if (!tagName || tagName[0] !== tagName[0].toLowerCase())
972
+ return false;
973
+ // Self-closing elements are simple
974
+ if (node.opening?.selfClosing)
975
+ return true;
976
+ // Elements with only text children (or empty) are simple
977
+ const children = node.children || [];
978
+ return children.length === 0 || children.every((c) => c.type === 'JSXText');
979
+ }
980
+ /**
981
+ * Returns the text content of a simple JSXElement's children.
982
+ */
983
+ function getJSXElementTextContent(node, content) {
984
+ const children = node.children || [];
985
+ return children
986
+ .filter((c) => c.type === 'JSXText')
987
+ .map((c) => content.slice(c.span.start, c.span.end))
988
+ .join('');
989
+ }
990
+ /**
991
+ * Returns true when a JSXElement is a `<Trans>` component
992
+ * (already instrumented content).
993
+ */
994
+ function isTransComponent(node) {
995
+ const opening = node.opening;
996
+ if (!opening)
997
+ return false;
998
+ const name = opening.name;
999
+ if (name?.type === 'Identifier' && name.value === 'Trans')
1000
+ return true;
1001
+ if (name?.type === 'JSXMemberExpression' && name.property?.type === 'Identifier' && name.property.value === 'Trans')
1002
+ return true;
1003
+ return false;
1004
+ }
842
1005
  // ─── Plural conditional pattern detection ────────────────────────────────────
843
1006
  /**
844
1007
  * Extracts the text value from a string literal or static template literal node.
@@ -1563,7 +1726,7 @@ async function writeExtractedKeys(candidates, config, namespace, logger = new Co
1563
1726
  translations[`${candidate.key}_other`] = pf.other;
1564
1727
  }
1565
1728
  else {
1566
- translations[candidate.key] = candidate.content;
1729
+ translations[candidate.key] = candidate.transValue ?? candidate.content;
1567
1730
  }
1568
1731
  }
1569
1732
  }
@@ -27,6 +27,7 @@ function transformFile(content, file, candidates, options) {
27
27
  const transformedComponents = new Set();
28
28
  let hasComponentCandidates = false;
29
29
  let hasNonComponentCandidates = false;
30
+ let hasTransCandidates = false;
30
31
  // ── Language-change site injections ────────────────────────────────────
31
32
  const languageChangeSites = options.languageChangeSites || [];
32
33
  // Track components that need `i18n` from useTranslation()
@@ -80,9 +81,15 @@ function transformFile(content, file, candidates, options) {
80
81
  if (replacement) {
81
82
  s.overwrite(candidate.offset, candidate.endOffset, replacement);
82
83
  transformCount++;
84
+ if (candidate.type === 'jsx-mixed') {
85
+ hasTransCandidates = true;
86
+ }
83
87
  if (candidate.insideComponent) {
84
- transformedComponents.add(candidate.insideComponent);
85
- hasComponentCandidates = true;
88
+ // jsx-mixed candidates use <Trans>, not t(), so they don't need useTranslation
89
+ if (candidate.type !== 'jsx-mixed') {
90
+ transformedComponents.add(candidate.insideComponent);
91
+ hasComponentCandidates = true;
92
+ }
86
93
  }
87
94
  else {
88
95
  hasNonComponentCandidates = true;
@@ -106,17 +113,20 @@ function transformFile(content, file, candidates, options) {
106
113
  const indent = detectIndent(content, comp.bodyStart);
107
114
  const defaultNS = options.config.extract?.defaultNS ?? 'translation';
108
115
  const nsArg = (options.namespace && options.namespace !== defaultNS) ? `'${options.namespace}'` : '';
109
- // Build destructuring: include `t` if the component has string candidates,
116
+ // Build destructuring: include `t` if the component has string candidates
117
+ // (but not jsx-mixed which use <Trans>),
110
118
  // include `i18n` if the component has language-change sites.
111
- const needsT = highConfidenceCandidates.some(c => c.insideComponent === comp.name);
119
+ const needsT = highConfidenceCandidates.some(c => c.insideComponent === comp.name && c.type !== 'jsx-mixed');
112
120
  const needsI18n = componentsNeedingI18n.has(comp.name);
113
121
  const parts = [];
114
122
  if (needsT)
115
123
  parts.push('t');
116
124
  if (needsI18n)
117
125
  parts.push('i18n');
118
- if (parts.length === 0)
119
- parts.push('t'); // fallback
126
+ // Skip if component needs neither t nor i18n
127
+ // (e.g. component only has jsx-mixed / <Trans> candidates)
128
+ if (!needsT && !needsI18n)
129
+ continue;
120
130
  const destructured = `{ ${parts.join(', ')} }`;
121
131
  s.appendRight(comp.bodyStart + 1, `\n${indent}const ${destructured} = useTranslation(${nsArg})`);
122
132
  injections.hookInjected = true;
@@ -146,7 +156,8 @@ function transformFile(content, file, candidates, options) {
146
156
  // Add import statements
147
157
  addImportStatements(s, content, {
148
158
  needsUseTranslation: hasComponentCandidates && options.hasReact,
149
- needsI18next: hasNonComponentCandidates || !options.hasReact
159
+ needsI18next: hasNonComponentCandidates || !options.hasReact,
160
+ needsTrans: hasTransCandidates && options.hasReact
150
161
  });
151
162
  injections.importAdded = true;
152
163
  }
@@ -230,7 +241,8 @@ function buildReplacement(candidate, key, useHookStyle, namespace) {
230
241
  return `{${tCall}}`;
231
242
  case 'jsx-mixed':
232
243
  if (useHookStyle) {
233
- return `<Trans i18nKey="${key}">${candidate.content}</Trans>`;
244
+ const nsAttr = namespace ? ` ns="${namespace}"` : '';
245
+ return `<Trans i18nKey="${key}"${nsAttr}>${candidate.content}</Trans>`;
234
246
  }
235
247
  return candidate.content;
236
248
  case 'template-literal':
@@ -284,12 +296,24 @@ function detectIndent(content, braceOffset) {
284
296
  return ' ';
285
297
  }
286
298
  /**
287
- * Adds necessary import statements (useTranslation and/or i18next).
299
+ * Adds necessary import statements (useTranslation, Trans, and/or i18next).
288
300
  */
289
301
  function addImportStatements(s, content, needs) {
290
302
  let importStatement = '';
291
- if (needs.needsUseTranslation && !hasImport(content, 'react-i18next')) {
292
- importStatement += "import { useTranslation } from 'react-i18next'\n";
303
+ // Build a combined react-i18next import
304
+ const reactI18nextImports = [];
305
+ if (needs.needsUseTranslation)
306
+ reactI18nextImports.push('useTranslation');
307
+ if (needs.needsTrans)
308
+ reactI18nextImports.push('Trans');
309
+ if (reactI18nextImports.length > 0) {
310
+ if (!hasImport(content, 'react-i18next')) {
311
+ importStatement += `import { ${reactI18nextImports.join(', ')} } from 'react-i18next'\n`;
312
+ }
313
+ else {
314
+ // react-i18next is already imported — augment with any missing named exports
315
+ augmentReactI18nextImport(s, content, reactI18nextImports);
316
+ }
293
317
  }
294
318
  if (needs.needsI18next && !hasImport(content, 'i18next')) {
295
319
  importStatement += "import i18next from 'i18next'\n";
@@ -314,6 +338,24 @@ function addImportStatements(s, content, needs) {
314
338
  }
315
339
  s.appendRight(insertPos, importStatement);
316
340
  }
341
+ /**
342
+ * Augments an existing `import { ... } from 'react-i18next'` with any missing
343
+ * named exports (e.g. adds `Trans` when only `useTranslation` is imported).
344
+ */
345
+ function augmentReactI18nextImport(s, content, needed) {
346
+ const importMatch = /import\s*\{([^}]*)\}\s*from\s*['"]react-i18next['"]/.exec(content);
347
+ if (!importMatch)
348
+ return;
349
+ const existingImports = importMatch[1].split(',').map(x => x.trim()).filter(Boolean);
350
+ const toAdd = needed.filter(n => !existingImports.includes(n));
351
+ if (toAdd.length === 0)
352
+ return;
353
+ const newImports = [...existingImports, ...toAdd].join(', ');
354
+ const newImportStatement = `import { ${newImports} } from 'react-i18next'`;
355
+ const matchStart = importMatch.index;
356
+ const matchEnd = matchStart + importMatch[0].length;
357
+ s.overwrite(matchStart, matchEnd, newImportStatement);
358
+ }
317
359
  /**
318
360
  * Generates a unified diff showing what changed.
319
361
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "i18next-cli",
3
- "version": "1.47.7",
3
+ "version": "1.47.8",
4
4
  "description": "A unified, high-performance i18next CLI.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1 +1 @@
1
- {"version":3,"file":"instrumenter.d.ts","sourceRoot":"","sources":["../../../src/instrumenter/core/instrumenter.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,MAAM,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,eAAe,EAA6B,sBAAsB,EAAiE,MAAM,aAAa,CAAA;AAUvN;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,oBAAoB,EAC5B,OAAO,EAAE,mBAAmB,EAC5B,MAAM,GAAE,MAA4B,GACnC,OAAO,CAAC,sBAAsB,CAAC,CA8MjC;AAs9CD;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,eAAe,EAAE,EAC7B,MAAM,EAAE,oBAAoB,EAC5B,SAAS,CAAC,EAAE,MAAM,EAClB,MAAM,GAAE,MAA4B,GACnC,OAAO,CAAC,IAAI,CAAC,CAoDf"}
1
+ {"version":3,"file":"instrumenter.d.ts","sourceRoot":"","sources":["../../../src/instrumenter/core/instrumenter.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,MAAM,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,eAAe,EAA6B,sBAAsB,EAAiE,MAAM,aAAa,CAAA;AAUvN;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,oBAAoB,EAC5B,OAAO,EAAE,mBAAmB,EAC5B,MAAM,GAAE,MAA4B,GACnC,OAAO,CAAC,sBAAsB,CAAC,CA8MjC;AAinDD;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,eAAe,EAAE,EAC7B,MAAM,EAAE,oBAAoB,EAC5B,SAAS,CAAC,EAAE,MAAM,EAClB,MAAM,GAAE,MAA4B,GACnC,OAAO,CAAC,IAAI,CAAC,CAoDf"}
@@ -1 +1 @@
1
- {"version":3,"file":"transformer.d.ts","sourceRoot":"","sources":["../../../src/instrumenter/core/transformer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,eAAe,EAAE,eAAe,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAGhI,UAAU,kBAAkB;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,EAAE,OAAO,CAAA;IACjB,qBAAqB,EAAE,OAAO,CAAA;IAC9B,MAAM,EAAE,IAAI,CAAC,oBAAoB,EAAE,SAAS,CAAC,CAAA;IAC7C,6EAA6E;IAC7E,UAAU,CAAC,EAAE,iBAAiB,EAAE,CAAA;IAChC,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gFAAgF;IAChF,mBAAmB,CAAC,EAAE,kBAAkB,EAAE,CAAA;CAC3C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,eAAe,EAAE,EAC7B,OAAO,EAAE,kBAAkB,GAC1B,eAAe,CA6KjB;AAiLD;;GAEG;AACH,wBAAgB,YAAY,CAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAwB1F"}
1
+ {"version":3,"file":"transformer.d.ts","sourceRoot":"","sources":["../../../src/instrumenter/core/transformer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,eAAe,EAAE,eAAe,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAGhI,UAAU,kBAAkB;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,EAAE,OAAO,CAAA;IACjB,qBAAqB,EAAE,OAAO,CAAA;IAC9B,MAAM,EAAE,IAAI,CAAC,oBAAoB,EAAE,SAAS,CAAC,CAAA;IAC7C,6EAA6E;IAC7E,UAAU,CAAC,EAAE,iBAAiB,EAAE,CAAA;IAChC,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gFAAgF;IAChF,mBAAmB,CAAC,EAAE,kBAAkB,EAAE,CAAA;CAC3C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,eAAe,EAAE,EAC7B,OAAO,EAAE,kBAAkB,GAC1B,eAAe,CAyLjB;AAmND;;GAEG;AACH,wBAAgB,YAAY,CAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAwB1F"}
package/types/types.d.ts CHANGED
@@ -807,6 +807,12 @@ export interface CandidateString {
807
807
  /** Source-code expression (e.g. `count`, `profile.name`) */
808
808
  expression: string;
809
809
  }>;
810
+ /**
811
+ * For `jsx-mixed` candidates: the translation value with indexed tags
812
+ * (e.g. `Click <1>here</1> to accept`). Used by `writeExtractedKeys` for
813
+ * the JSON output instead of `content`.
814
+ */
815
+ transValue?: string;
810
816
  /**
811
817
  * Plural forms detected from a conditional (ternary) pattern.
812
818
  * When present the transformer emits `t(key, { count: expr })` and the
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}