i18next-cli 1.50.7 → 1.51.0

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/README.md CHANGED
@@ -649,6 +649,12 @@ export default defineConfig({
649
649
  // The count option can still be used for {{count}} interpolation in the translation value
650
650
  disablePlurals: false, // Default: false
651
651
 
652
+ // Force generation of all 6 CLDR plural forms (zero, one, two, few, many, other)
653
+ // for every language, including the primary language.
654
+ // Useful when secondary languages need plural forms that the primary language doesn't have,
655
+ // and you want a consistent set of keys across all locales.
656
+ allPluralForms: false, // Default: false
657
+
652
658
  // Prefix for nested translations.
653
659
  // Controls how nested $t(...) calls inside strings are detected.
654
660
  // Example: '$t('
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.50.7'); // This string is replaced with the actual version at build time by rollup
34
+ .version('1.51.0'); // 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
@@ -6,6 +6,7 @@ var nestedObject = require('../../utils/nested-object.js');
6
6
  var fileUtils = require('../../utils/file-utils.js');
7
7
  var defaultValue = require('../../utils/default-value.js');
8
8
  var logger = require('../../utils/logger.js');
9
+ var pluralRules = require('../../utils/plural-rules.js');
9
10
 
10
11
  // used for natural language check
11
12
  const chars = [' ', ',', '?', '!', ';'];
@@ -264,25 +265,14 @@ function buildNewTranslationsForNs(nsKeys, existingTranslations, config, locale,
264
265
  }
265
266
  }
266
267
  // Get the plural categories for the target language (only used for filtering extracted keys)
268
+ // safePluralRules falls back to 'en' for non-BCP47 custom locale codes (e.g. 'E', 'F')
267
269
  const targetLanguagePluralCategories = new Set();
270
+ const cardinalRules = pluralRules.safePluralRules(locale, { type: 'cardinal' });
271
+ const ordinalRules = pluralRules.safePluralRules(locale, { type: 'ordinal' });
268
272
  // Track cardinal plural categories separately so we can special-case single-"other" languages
269
- let cardinalCategories = [];
270
- try {
271
- const cardinalRules = new Intl.PluralRules(locale, { type: 'cardinal' });
272
- const ordinalRules = new Intl.PluralRules(locale, { type: 'ordinal' });
273
- cardinalCategories = cardinalRules.resolvedOptions().pluralCategories;
274
- cardinalCategories.forEach(cat => targetLanguagePluralCategories.add(cat));
275
- ordinalRules.resolvedOptions().pluralCategories.forEach(cat => targetLanguagePluralCategories.add(`ordinal_${cat}`));
276
- }
277
- catch (e) {
278
- // Fallback to primaryLanguage (or English) if locale is invalid
279
- const fallbackLang = primaryLanguage || 'en';
280
- const cardinalRules = new Intl.PluralRules(fallbackLang, { type: 'cardinal' });
281
- const ordinalRules = new Intl.PluralRules(fallbackLang, { type: 'ordinal' });
282
- cardinalCategories = cardinalRules.resolvedOptions().pluralCategories;
283
- cardinalCategories.forEach(cat => targetLanguagePluralCategories.add(cat));
284
- ordinalRules.resolvedOptions().pluralCategories.forEach(cat => targetLanguagePluralCategories.add(`ordinal_${cat}`));
285
- }
273
+ const cardinalCategories = cardinalRules.resolvedOptions().pluralCategories;
274
+ cardinalCategories.forEach(cat => targetLanguagePluralCategories.add(cat));
275
+ ordinalRules.resolvedOptions().pluralCategories.forEach(cat => targetLanguagePluralCategories.add(`ordinal_${cat}`));
286
276
  // Prepare namespace pattern checking helpers
287
277
  const rawPreserve = config.extract.preservePatterns || [];
288
278
  // Helper to check if a key should be filtered out during extraction
@@ -373,6 +363,10 @@ function buildNewTranslationsForNs(nsKeys, existingTranslations, config, locale,
373
363
  if (lastPart === 'zero' && explicitDefault) {
374
364
  return true;
375
365
  }
366
+ // When allPluralForms is enabled, include all CLDR plural forms regardless of the target language
367
+ if (config.extract.allPluralForms && pluralForms.includes(lastPart)) {
368
+ return true;
369
+ }
376
370
  if (isOrdinal && keyParts.includes('ordinal')) {
377
371
  // For ordinal plurals: key_context_ordinal_category or key_ordinal_category
378
372
  return targetLanguagePluralCategories.has(`ordinal_${lastPart}`);
@@ -517,8 +511,8 @@ function buildNewTranslationsForNs(nsKeys, existingTranslations, config, locale,
517
511
  let formsToGenerate;
518
512
  if (locale !== primaryLanguage) {
519
513
  // For non-primary locales:
520
- // 1. Generate the forms that locale actually needs
521
- formsToGenerate = cardinalCategories;
514
+ // 1. Generate the forms that locale actually needs (or all forms if allPluralForms is enabled)
515
+ formsToGenerate = config.extract.allPluralForms ? [...pluralForms] : cardinalCategories;
522
516
  // 2. Also prepare empty placeholders for all OTHER CLDR forms not in this locale
523
517
  // so translators can add them manually without --sync-primary removing them
524
518
  const otherForms = pluralForms.filter(f => !cardinalCategories.includes(f));
@@ -561,14 +555,14 @@ function buildNewTranslationsForNs(nsKeys, existingTranslations, config, locale,
561
555
  }
562
556
  else {
563
557
  // For primary language, only expand if it has multiple plural forms
564
- // Single-"other" languages (ja, zh, ko) should NOT expand the base key
565
- if (cardinalCategories.length === 1 && cardinalCategories[0] === 'other') {
558
+ // Single-"other" languages (ja, zh, ko) should NOT expand the base key (unless allPluralForms is enabled)
559
+ if (cardinalCategories.length === 1 && cardinalCategories[0] === 'other' && !config.extract.allPluralForms) {
566
560
  // Single-"other" language - don't expand, keep just the base key
567
561
  formsToGenerate = [];
568
562
  }
569
563
  else {
570
- // Multi-form language - expand to its plural forms
571
- formsToGenerate = cardinalCategories;
564
+ // Multi-form language - expand to its plural forms (or all forms if allPluralForms is enabled)
565
+ formsToGenerate = config.extract.allPluralForms ? [...pluralForms] : cardinalCategories;
572
566
  for (const form of formsToGenerate) {
573
567
  const finalKey = isOrdinal
574
568
  ? `${base}${pluralSeparator}${form}`
@@ -716,6 +710,27 @@ function buildNewTranslationsForNs(nsKeys, existingTranslations, config, locale,
716
710
  }
717
711
  nestedObject.setNestedValue(newTranslations, key, valueToSet, separator);
718
712
  }
713
+ // When allPluralForms is enabled, ensure all 6 CLDR plural forms exist for every plural base key.
714
+ // The extractor only generates forms for the configured locales' categories, so we need to fill in the rest.
715
+ if (config.extract.allPluralForms && !config.extract.disablePlurals) {
716
+ for (const base of expandedBases) {
717
+ for (const form of pluralForms) {
718
+ const finalKey = `${base}${pluralSeparator}${form}`;
719
+ const separator = finalKey.startsWith('<') ? false : (keySeparator ?? '.');
720
+ const existingInNew = nestedObject.getNestedValue(newTranslations, finalKey, separator);
721
+ if (existingInNew === undefined) {
722
+ const existingVariantValue = nestedObject.getNestedValue(existingTranslations, finalKey, separator);
723
+ if (existingVariantValue !== undefined) {
724
+ nestedObject.setNestedValue(newTranslations, finalKey, existingVariantValue, separator);
725
+ }
726
+ else {
727
+ const resolvedValue = defaultValue.resolveDefaultValue(emptyDefaultValue, String(base), namespace || config?.extract?.defaultNS || 'translation', locale);
728
+ nestedObject.setNestedValue(newTranslations, finalKey, resolvedValue, separator);
729
+ }
730
+ }
731
+ }
732
+ }
733
+ }
719
734
  // 2a. When sort is disabled but removeUnusedKeys is on, the rebuild from `{}`
720
735
  // lost the original key order. Reorder to match existingTranslations, with new keys at the end.
721
736
  if (sort === false && removeUnusedKeys) {
@@ -1,5 +1,6 @@
1
1
  'use strict';
2
2
 
3
+ var pluralRules = require('../../utils/plural-rules.js');
3
4
  var astUtils = require('./ast-utils.js');
4
5
 
5
6
  // Helper to escape regex characters
@@ -341,7 +342,7 @@ class CallExpressionHandler {
341
342
  const primaryLang = this.config.extract?.primaryLanguage || (Array.isArray(this.config.locales) ? this.config.locales[0] : undefined) || 'en';
342
343
  let isSingleOther = false;
343
344
  try {
344
- const primaryCategories = new Intl.PluralRules(primaryLang, { type: typeForCheck }).resolvedOptions().pluralCategories;
345
+ const primaryCategories = pluralRules.safePluralRules(primaryLang, { type: typeForCheck }).resolvedOptions().pluralCategories;
345
346
  if (primaryCategories.length === 1 && primaryCategories[0] === 'other') {
346
347
  isSingleOther = true;
347
348
  }
@@ -353,11 +354,11 @@ class CallExpressionHandler {
353
354
  const allPluralCategoriesCheck = new Set();
354
355
  for (const locale of this.config.locales) {
355
356
  try {
356
- const rules = new Intl.PluralRules(locale, { type: typeForCheck });
357
+ const rules = pluralRules.safePluralRules(locale, { type: typeForCheck });
357
358
  rules.resolvedOptions().pluralCategories.forEach(c => allPluralCategoriesCheck.add(c));
358
359
  }
359
360
  catch {
360
- new Intl.PluralRules('en', { type: typeForCheck }).resolvedOptions().pluralCategories.forEach(c => allPluralCategoriesCheck.add(c));
361
+ pluralRules.safePluralRules('en', { type: typeForCheck }).resolvedOptions().pluralCategories.forEach(c => allPluralCategoriesCheck.add(c));
361
362
  }
362
363
  }
363
364
  const pluralCategoriesCheck = Array.from(allPluralCategoriesCheck).sort();
@@ -551,12 +552,12 @@ class CallExpressionHandler {
551
552
  const locales = this.config.locales || ['en'];
552
553
  for (const locale of locales) {
553
554
  try {
554
- const pluralRules = new Intl.PluralRules(locale, { type });
555
- const categories = pluralRules.resolvedOptions().pluralCategories;
555
+ const pluralRules$1 = pluralRules.safePluralRules(locale, { type });
556
+ const categories = pluralRules$1.resolvedOptions().pluralCategories;
556
557
  categories.forEach(cat => allPluralCategories.add(cat));
557
558
  }
558
559
  catch (e) {
559
- const englishRules = new Intl.PluralRules('en', { type });
560
+ const englishRules = pluralRules.safePluralRules('en', { type });
560
561
  const categories = englishRules.resolvedOptions().pluralCategories;
561
562
  categories.forEach(cat => allPluralCategories.add(cat));
562
563
  }
@@ -567,7 +568,7 @@ class CallExpressionHandler {
567
568
  const primaryLang = this.config.extract?.primaryLanguage || (Array.isArray(this.config.locales) ? this.config.locales[0] : undefined) || 'en';
568
569
  let primaryIsSingleOther = false;
569
570
  try {
570
- const primaryCats = new Intl.PluralRules(primaryLang, { type }).resolvedOptions().pluralCategories;
571
+ const primaryCats = pluralRules.safePluralRules(primaryLang, { type }).resolvedOptions().pluralCategories;
571
572
  if (primaryCats.length === 1 && primaryCats[0] === 'other')
572
573
  primaryIsSingleOther = true;
573
574
  }
@@ -710,13 +711,13 @@ class CallExpressionHandler {
710
711
  const allPluralCategories = new Set();
711
712
  for (const locale of this.config.locales) {
712
713
  try {
713
- const pluralRules = new Intl.PluralRules(locale, { type });
714
- const categories = pluralRules.resolvedOptions().pluralCategories;
714
+ const pluralRules$1 = pluralRules.safePluralRules(locale, { type });
715
+ const categories = pluralRules$1.resolvedOptions().pluralCategories;
715
716
  categories.forEach(cat => allPluralCategories.add(cat));
716
717
  }
717
718
  catch (e) {
718
719
  // If a locale is invalid, fall back to English rules
719
- const englishRules = new Intl.PluralRules('en', { type });
720
+ const englishRules = pluralRules.safePluralRules('en', { type });
720
721
  const categories = englishRules.resolvedOptions().pluralCategories;
721
722
  categories.forEach(cat => allPluralCategories.add(cat));
722
723
  }
@@ -783,7 +784,7 @@ class CallExpressionHandler {
783
784
  const primaryLang = this.config.extract?.primaryLanguage || (Array.isArray(this.config.locales) ? this.config.locales[0] : undefined) || 'en';
784
785
  let primaryIsSingleOther = false;
785
786
  try {
786
- const primaryCats = new Intl.PluralRules(primaryLang, { type }).resolvedOptions().pluralCategories;
787
+ const primaryCats = pluralRules.safePluralRules(primaryLang, { type }).resolvedOptions().pluralCategories;
787
788
  if (primaryCats.length === 1 && primaryCats[0] === 'other')
788
789
  primaryIsSingleOther = true;
789
790
  }
@@ -1,5 +1,7 @@
1
1
  'use strict';
2
2
 
3
+ var pluralRules = require('../../utils/plural-rules.js');
4
+
3
5
  // Checks if a string looks like natural language (contains spaces, punctuation, etc.)
4
6
  const naturalLanguageChars = /[ ,?!;]/;
5
7
  const looksLikeNaturalLanguage = (s) => naturalLanguageChars.test(s);
@@ -170,13 +172,13 @@ function generatePluralKeys(key, defaultValue, ns, pluginContext, config, isOrdi
170
172
  const allPluralCategories = new Set();
171
173
  for (const locale of config.locales) {
172
174
  try {
173
- const pluralRules = new Intl.PluralRules(locale, { type });
174
- const categories = pluralRules.resolvedOptions().pluralCategories;
175
+ const pluralRules$1 = pluralRules.safePluralRules(locale, { type });
176
+ const categories = pluralRules$1.resolvedOptions().pluralCategories;
175
177
  categories.forEach(cat => allPluralCategories.add(cat));
176
178
  }
177
179
  catch (e) {
178
180
  // If a locale is invalid, fall back to English rules
179
- const englishRules = new Intl.PluralRules('en', { type });
181
+ const englishRules = pluralRules.safePluralRules('en', { type });
180
182
  const categories = englishRules.resolvedOptions().pluralCategories;
181
183
  categories.forEach(cat => allPluralCategories.add(cat));
182
184
  }
@@ -223,13 +225,13 @@ function generateContextPluralKeys(key, defaultValue, ns, context, pluginContext
223
225
  const allPluralCategories = new Set();
224
226
  for (const locale of config.locales) {
225
227
  try {
226
- const pluralRules = new Intl.PluralRules(locale, { type });
227
- const categories = pluralRules.resolvedOptions().pluralCategories;
228
+ const pluralRules$1 = pluralRules.safePluralRules(locale, { type });
229
+ const categories = pluralRules$1.resolvedOptions().pluralCategories;
228
230
  categories.forEach(cat => allPluralCategories.add(cat));
229
231
  }
230
232
  catch (e) {
231
233
  // If a locale is invalid, fall back to English rules
232
- const englishRules = new Intl.PluralRules(config.extract.primaryLanguage || 'en', { type });
234
+ const englishRules = pluralRules.safePluralRules(config.extract.primaryLanguage || 'en', { type });
233
235
  const categories = englishRules.resolvedOptions().pluralCategories;
234
236
  categories.forEach(cat => allPluralCategories.add(cat));
235
237
  }
@@ -1,5 +1,6 @@
1
1
  'use strict';
2
2
 
3
+ var pluralRules = require('../../utils/plural-rules.js');
3
4
  var jsxParser = require('./jsx-parser.js');
4
5
  var astUtils = require('./ast-utils.js');
5
6
 
@@ -360,13 +361,13 @@ class JSXHandler {
360
361
  const allPluralCategories = new Set();
361
362
  for (const locale of this.config.locales) {
362
363
  try {
363
- const pluralRules = new Intl.PluralRules(locale, { type });
364
- const categories = pluralRules.resolvedOptions().pluralCategories;
364
+ const pluralRules$1 = pluralRules.safePluralRules(locale, { type });
365
+ const categories = pluralRules$1.resolvedOptions().pluralCategories;
365
366
  categories.forEach(cat => allPluralCategories.add(cat));
366
367
  }
367
368
  catch (e) {
368
369
  // If a locale is invalid, fall back to English rules
369
- const englishRules = new Intl.PluralRules('en', { type });
370
+ const englishRules = pluralRules.safePluralRules('en', { type });
370
371
  const categories = englishRules.resolvedOptions().pluralCategories;
371
372
  categories.forEach(cat => allPluralCategories.add(cat));
372
373
  }
@@ -9,6 +9,7 @@ var keyFinder = require('./extractor/core/key-finder.js');
9
9
  require('glob');
10
10
  var nestedObject = require('./utils/nested-object.js');
11
11
  var fileUtils = require('./utils/file-utils.js');
12
+ var pluralRules = require('./utils/plural-rules.js');
12
13
  var funnelMsgTracker = require('./utils/funnel-msg-tracker.js');
13
14
  require('./extractor/parsers/jsx-parser.js');
14
15
 
@@ -142,12 +143,12 @@ async function generateStatusReport(config) {
142
143
  const getLocalePluralCategories = (locale, isOrdinal) => {
143
144
  try {
144
145
  const type = isOrdinal ? 'ordinal' : 'cardinal';
145
- const pluralRules = new Intl.PluralRules(locale, { type });
146
- return pluralRules.resolvedOptions().pluralCategories;
146
+ const pluralRules$1 = pluralRules.safePluralRules(locale, { type });
147
+ return pluralRules$1.resolvedOptions().pluralCategories;
147
148
  }
148
149
  catch (e) {
149
150
  // Fallback to English if locale is invalid
150
- const fallbackRules = new Intl.PluralRules('en', { type: isOrdinal ? 'ordinal' : 'cardinal' });
151
+ const fallbackRules = pluralRules.safePluralRules('en', { type: isOrdinal ? 'ordinal' : 'cardinal' });
151
152
  return fallbackRules.resolvedOptions().pluralCategories;
152
153
  }
153
154
  };
@@ -10,6 +10,7 @@ var defaultValue = require('./utils/default-value.js');
10
10
  var fileUtils = require('./utils/file-utils.js');
11
11
  var funnelMsgTracker = require('./utils/funnel-msg-tracker.js');
12
12
  var nestedObject = require('./utils/nested-object.js');
13
+ var pluralRules = require('./utils/plural-rules.js');
13
14
 
14
15
  /**
15
16
  * Synchronizes translation files across different locales by ensuring all secondary
@@ -92,7 +93,7 @@ async function runSyncer(config, options = {}) {
92
93
  const sep = config.extract.pluralSeparator ?? '_';
93
94
  const localeCardinalCategories = (() => {
94
95
  try {
95
- return new Set(new Intl.PluralRules(lang, { type: 'cardinal' }).resolvedOptions().pluralCategories);
96
+ return new Set(pluralRules.safePluralRules(lang, { type: 'cardinal' }).resolvedOptions().pluralCategories);
96
97
  }
97
98
  catch {
98
99
  return new Set(['one', 'other']);
@@ -100,7 +101,7 @@ async function runSyncer(config, options = {}) {
100
101
  })();
101
102
  const localeOrdinalCategories = (() => {
102
103
  try {
103
- return new Set(new Intl.PluralRules(lang, { type: 'ordinal' }).resolvedOptions().pluralCategories);
104
+ return new Set(pluralRules.safePluralRules(lang, { type: 'ordinal' }).resolvedOptions().pluralCategories);
104
105
  }
105
106
  catch {
106
107
  return new Set(['one', 'other', 'two', 'few']);
@@ -0,0 +1,19 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * Creates an Intl.PluralRules instance, falling back to English ('en')
5
+ * if the given locale is not a valid BCP 47 language tag.
6
+ *
7
+ * This allows projects to use custom locale codes (e.g. 'E', 'F')
8
+ * that are not recognized by the Intl API.
9
+ */
10
+ function safePluralRules(locale, options) {
11
+ try {
12
+ return new Intl.PluralRules(locale, options);
13
+ }
14
+ catch {
15
+ return new Intl.PluralRules('en', options);
16
+ }
17
+ }
18
+
19
+ exports.safePluralRules = safePluralRules;
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.50.7'); // This string is replaced with the actual version at build time by rollup
32
+ .version('1.51.0'); // 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
@@ -4,6 +4,7 @@ import { getNestedKeys, getNestedValue, setNestedValue } from '../../utils/neste
4
4
  import { getOutputPath, loadTranslationFile } from '../../utils/file-utils.js';
5
5
  import { resolveDefaultValue } from '../../utils/default-value.js';
6
6
  import { ConsoleLogger } from '../../utils/logger.js';
7
+ import { safePluralRules } from '../../utils/plural-rules.js';
7
8
 
8
9
  // used for natural language check
9
10
  const chars = [' ', ',', '?', '!', ';'];
@@ -262,25 +263,14 @@ function buildNewTranslationsForNs(nsKeys, existingTranslations, config, locale,
262
263
  }
263
264
  }
264
265
  // Get the plural categories for the target language (only used for filtering extracted keys)
266
+ // safePluralRules falls back to 'en' for non-BCP47 custom locale codes (e.g. 'E', 'F')
265
267
  const targetLanguagePluralCategories = new Set();
268
+ const cardinalRules = safePluralRules(locale, { type: 'cardinal' });
269
+ const ordinalRules = safePluralRules(locale, { type: 'ordinal' });
266
270
  // Track cardinal plural categories separately so we can special-case single-"other" languages
267
- let cardinalCategories = [];
268
- try {
269
- const cardinalRules = new Intl.PluralRules(locale, { type: 'cardinal' });
270
- const ordinalRules = new Intl.PluralRules(locale, { type: 'ordinal' });
271
- cardinalCategories = cardinalRules.resolvedOptions().pluralCategories;
272
- cardinalCategories.forEach(cat => targetLanguagePluralCategories.add(cat));
273
- ordinalRules.resolvedOptions().pluralCategories.forEach(cat => targetLanguagePluralCategories.add(`ordinal_${cat}`));
274
- }
275
- catch (e) {
276
- // Fallback to primaryLanguage (or English) if locale is invalid
277
- const fallbackLang = primaryLanguage || 'en';
278
- const cardinalRules = new Intl.PluralRules(fallbackLang, { type: 'cardinal' });
279
- const ordinalRules = new Intl.PluralRules(fallbackLang, { type: 'ordinal' });
280
- cardinalCategories = cardinalRules.resolvedOptions().pluralCategories;
281
- cardinalCategories.forEach(cat => targetLanguagePluralCategories.add(cat));
282
- ordinalRules.resolvedOptions().pluralCategories.forEach(cat => targetLanguagePluralCategories.add(`ordinal_${cat}`));
283
- }
271
+ const cardinalCategories = cardinalRules.resolvedOptions().pluralCategories;
272
+ cardinalCategories.forEach(cat => targetLanguagePluralCategories.add(cat));
273
+ ordinalRules.resolvedOptions().pluralCategories.forEach(cat => targetLanguagePluralCategories.add(`ordinal_${cat}`));
284
274
  // Prepare namespace pattern checking helpers
285
275
  const rawPreserve = config.extract.preservePatterns || [];
286
276
  // Helper to check if a key should be filtered out during extraction
@@ -371,6 +361,10 @@ function buildNewTranslationsForNs(nsKeys, existingTranslations, config, locale,
371
361
  if (lastPart === 'zero' && explicitDefault) {
372
362
  return true;
373
363
  }
364
+ // When allPluralForms is enabled, include all CLDR plural forms regardless of the target language
365
+ if (config.extract.allPluralForms && pluralForms.includes(lastPart)) {
366
+ return true;
367
+ }
374
368
  if (isOrdinal && keyParts.includes('ordinal')) {
375
369
  // For ordinal plurals: key_context_ordinal_category or key_ordinal_category
376
370
  return targetLanguagePluralCategories.has(`ordinal_${lastPart}`);
@@ -515,8 +509,8 @@ function buildNewTranslationsForNs(nsKeys, existingTranslations, config, locale,
515
509
  let formsToGenerate;
516
510
  if (locale !== primaryLanguage) {
517
511
  // For non-primary locales:
518
- // 1. Generate the forms that locale actually needs
519
- formsToGenerate = cardinalCategories;
512
+ // 1. Generate the forms that locale actually needs (or all forms if allPluralForms is enabled)
513
+ formsToGenerate = config.extract.allPluralForms ? [...pluralForms] : cardinalCategories;
520
514
  // 2. Also prepare empty placeholders for all OTHER CLDR forms not in this locale
521
515
  // so translators can add them manually without --sync-primary removing them
522
516
  const otherForms = pluralForms.filter(f => !cardinalCategories.includes(f));
@@ -559,14 +553,14 @@ function buildNewTranslationsForNs(nsKeys, existingTranslations, config, locale,
559
553
  }
560
554
  else {
561
555
  // For primary language, only expand if it has multiple plural forms
562
- // Single-"other" languages (ja, zh, ko) should NOT expand the base key
563
- if (cardinalCategories.length === 1 && cardinalCategories[0] === 'other') {
556
+ // Single-"other" languages (ja, zh, ko) should NOT expand the base key (unless allPluralForms is enabled)
557
+ if (cardinalCategories.length === 1 && cardinalCategories[0] === 'other' && !config.extract.allPluralForms) {
564
558
  // Single-"other" language - don't expand, keep just the base key
565
559
  formsToGenerate = [];
566
560
  }
567
561
  else {
568
- // Multi-form language - expand to its plural forms
569
- formsToGenerate = cardinalCategories;
562
+ // Multi-form language - expand to its plural forms (or all forms if allPluralForms is enabled)
563
+ formsToGenerate = config.extract.allPluralForms ? [...pluralForms] : cardinalCategories;
570
564
  for (const form of formsToGenerate) {
571
565
  const finalKey = isOrdinal
572
566
  ? `${base}${pluralSeparator}${form}`
@@ -714,6 +708,27 @@ function buildNewTranslationsForNs(nsKeys, existingTranslations, config, locale,
714
708
  }
715
709
  setNestedValue(newTranslations, key, valueToSet, separator);
716
710
  }
711
+ // When allPluralForms is enabled, ensure all 6 CLDR plural forms exist for every plural base key.
712
+ // The extractor only generates forms for the configured locales' categories, so we need to fill in the rest.
713
+ if (config.extract.allPluralForms && !config.extract.disablePlurals) {
714
+ for (const base of expandedBases) {
715
+ for (const form of pluralForms) {
716
+ const finalKey = `${base}${pluralSeparator}${form}`;
717
+ const separator = finalKey.startsWith('<') ? false : (keySeparator ?? '.');
718
+ const existingInNew = getNestedValue(newTranslations, finalKey, separator);
719
+ if (existingInNew === undefined) {
720
+ const existingVariantValue = getNestedValue(existingTranslations, finalKey, separator);
721
+ if (existingVariantValue !== undefined) {
722
+ setNestedValue(newTranslations, finalKey, existingVariantValue, separator);
723
+ }
724
+ else {
725
+ const resolvedValue = resolveDefaultValue(emptyDefaultValue, String(base), namespace || config?.extract?.defaultNS || 'translation', locale);
726
+ setNestedValue(newTranslations, finalKey, resolvedValue, separator);
727
+ }
728
+ }
729
+ }
730
+ }
731
+ }
717
732
  // 2a. When sort is disabled but removeUnusedKeys is on, the rebuild from `{}`
718
733
  // lost the original key order. Reorder to match existingTranslations, with new keys at the end.
719
734
  if (sort === false && removeUnusedKeys) {
@@ -1,3 +1,4 @@
1
+ import { safePluralRules } from '../../utils/plural-rules.js';
1
2
  import { lineColumnFromOffset, isSimpleTemplateLiteral, getObjectPropValue, getObjectPropValueExpression } from './ast-utils.js';
2
3
 
3
4
  // Helper to escape regex characters
@@ -339,7 +340,7 @@ class CallExpressionHandler {
339
340
  const primaryLang = this.config.extract?.primaryLanguage || (Array.isArray(this.config.locales) ? this.config.locales[0] : undefined) || 'en';
340
341
  let isSingleOther = false;
341
342
  try {
342
- const primaryCategories = new Intl.PluralRules(primaryLang, { type: typeForCheck }).resolvedOptions().pluralCategories;
343
+ const primaryCategories = safePluralRules(primaryLang, { type: typeForCheck }).resolvedOptions().pluralCategories;
343
344
  if (primaryCategories.length === 1 && primaryCategories[0] === 'other') {
344
345
  isSingleOther = true;
345
346
  }
@@ -351,11 +352,11 @@ class CallExpressionHandler {
351
352
  const allPluralCategoriesCheck = new Set();
352
353
  for (const locale of this.config.locales) {
353
354
  try {
354
- const rules = new Intl.PluralRules(locale, { type: typeForCheck });
355
+ const rules = safePluralRules(locale, { type: typeForCheck });
355
356
  rules.resolvedOptions().pluralCategories.forEach(c => allPluralCategoriesCheck.add(c));
356
357
  }
357
358
  catch {
358
- new Intl.PluralRules('en', { type: typeForCheck }).resolvedOptions().pluralCategories.forEach(c => allPluralCategoriesCheck.add(c));
359
+ safePluralRules('en', { type: typeForCheck }).resolvedOptions().pluralCategories.forEach(c => allPluralCategoriesCheck.add(c));
359
360
  }
360
361
  }
361
362
  const pluralCategoriesCheck = Array.from(allPluralCategoriesCheck).sort();
@@ -549,12 +550,12 @@ class CallExpressionHandler {
549
550
  const locales = this.config.locales || ['en'];
550
551
  for (const locale of locales) {
551
552
  try {
552
- const pluralRules = new Intl.PluralRules(locale, { type });
553
+ const pluralRules = safePluralRules(locale, { type });
553
554
  const categories = pluralRules.resolvedOptions().pluralCategories;
554
555
  categories.forEach(cat => allPluralCategories.add(cat));
555
556
  }
556
557
  catch (e) {
557
- const englishRules = new Intl.PluralRules('en', { type });
558
+ const englishRules = safePluralRules('en', { type });
558
559
  const categories = englishRules.resolvedOptions().pluralCategories;
559
560
  categories.forEach(cat => allPluralCategories.add(cat));
560
561
  }
@@ -565,7 +566,7 @@ class CallExpressionHandler {
565
566
  const primaryLang = this.config.extract?.primaryLanguage || (Array.isArray(this.config.locales) ? this.config.locales[0] : undefined) || 'en';
566
567
  let primaryIsSingleOther = false;
567
568
  try {
568
- const primaryCats = new Intl.PluralRules(primaryLang, { type }).resolvedOptions().pluralCategories;
569
+ const primaryCats = safePluralRules(primaryLang, { type }).resolvedOptions().pluralCategories;
569
570
  if (primaryCats.length === 1 && primaryCats[0] === 'other')
570
571
  primaryIsSingleOther = true;
571
572
  }
@@ -708,13 +709,13 @@ class CallExpressionHandler {
708
709
  const allPluralCategories = new Set();
709
710
  for (const locale of this.config.locales) {
710
711
  try {
711
- const pluralRules = new Intl.PluralRules(locale, { type });
712
+ const pluralRules = safePluralRules(locale, { type });
712
713
  const categories = pluralRules.resolvedOptions().pluralCategories;
713
714
  categories.forEach(cat => allPluralCategories.add(cat));
714
715
  }
715
716
  catch (e) {
716
717
  // If a locale is invalid, fall back to English rules
717
- const englishRules = new Intl.PluralRules('en', { type });
718
+ const englishRules = safePluralRules('en', { type });
718
719
  const categories = englishRules.resolvedOptions().pluralCategories;
719
720
  categories.forEach(cat => allPluralCategories.add(cat));
720
721
  }
@@ -781,7 +782,7 @@ class CallExpressionHandler {
781
782
  const primaryLang = this.config.extract?.primaryLanguage || (Array.isArray(this.config.locales) ? this.config.locales[0] : undefined) || 'en';
782
783
  let primaryIsSingleOther = false;
783
784
  try {
784
- const primaryCats = new Intl.PluralRules(primaryLang, { type }).resolvedOptions().pluralCategories;
785
+ const primaryCats = safePluralRules(primaryLang, { type }).resolvedOptions().pluralCategories;
785
786
  if (primaryCats.length === 1 && primaryCats[0] === 'other')
786
787
  primaryIsSingleOther = true;
787
788
  }
@@ -1,3 +1,5 @@
1
+ import { safePluralRules } from '../../utils/plural-rules.js';
2
+
1
3
  // Checks if a string looks like natural language (contains spaces, punctuation, etc.)
2
4
  const naturalLanguageChars = /[ ,?!;]/;
3
5
  const looksLikeNaturalLanguage = (s) => naturalLanguageChars.test(s);
@@ -168,13 +170,13 @@ function generatePluralKeys(key, defaultValue, ns, pluginContext, config, isOrdi
168
170
  const allPluralCategories = new Set();
169
171
  for (const locale of config.locales) {
170
172
  try {
171
- const pluralRules = new Intl.PluralRules(locale, { type });
173
+ const pluralRules = safePluralRules(locale, { type });
172
174
  const categories = pluralRules.resolvedOptions().pluralCategories;
173
175
  categories.forEach(cat => allPluralCategories.add(cat));
174
176
  }
175
177
  catch (e) {
176
178
  // If a locale is invalid, fall back to English rules
177
- const englishRules = new Intl.PluralRules('en', { type });
179
+ const englishRules = safePluralRules('en', { type });
178
180
  const categories = englishRules.resolvedOptions().pluralCategories;
179
181
  categories.forEach(cat => allPluralCategories.add(cat));
180
182
  }
@@ -221,13 +223,13 @@ function generateContextPluralKeys(key, defaultValue, ns, context, pluginContext
221
223
  const allPluralCategories = new Set();
222
224
  for (const locale of config.locales) {
223
225
  try {
224
- const pluralRules = new Intl.PluralRules(locale, { type });
226
+ const pluralRules = safePluralRules(locale, { type });
225
227
  const categories = pluralRules.resolvedOptions().pluralCategories;
226
228
  categories.forEach(cat => allPluralCategories.add(cat));
227
229
  }
228
230
  catch (e) {
229
231
  // If a locale is invalid, fall back to English rules
230
- const englishRules = new Intl.PluralRules(config.extract.primaryLanguage || 'en', { type });
232
+ const englishRules = safePluralRules(config.extract.primaryLanguage || 'en', { type });
231
233
  const categories = englishRules.resolvedOptions().pluralCategories;
232
234
  categories.forEach(cat => allPluralCategories.add(cat));
233
235
  }
@@ -1,3 +1,4 @@
1
+ import { safePluralRules } from '../../utils/plural-rules.js';
1
2
  import { extractFromTransComponent } from './jsx-parser.js';
2
3
  import { lineColumnFromOffset, getObjectPropValue } from './ast-utils.js';
3
4
 
@@ -358,13 +359,13 @@ class JSXHandler {
358
359
  const allPluralCategories = new Set();
359
360
  for (const locale of this.config.locales) {
360
361
  try {
361
- const pluralRules = new Intl.PluralRules(locale, { type });
362
+ const pluralRules = safePluralRules(locale, { type });
362
363
  const categories = pluralRules.resolvedOptions().pluralCategories;
363
364
  categories.forEach(cat => allPluralCategories.add(cat));
364
365
  }
365
366
  catch (e) {
366
367
  // If a locale is invalid, fall back to English rules
367
- const englishRules = new Intl.PluralRules('en', { type });
368
+ const englishRules = safePluralRules('en', { type });
368
369
  const categories = englishRules.resolvedOptions().pluralCategories;
369
370
  categories.forEach(cat => allPluralCategories.add(cat));
370
371
  }
@@ -7,6 +7,7 @@ import { findKeys } from './extractor/core/key-finder.js';
7
7
  import 'glob';
8
8
  import { getNestedValue } from './utils/nested-object.js';
9
9
  import { loadTranslationFile, getOutputPath } from './utils/file-utils.js';
10
+ import { safePluralRules } from './utils/plural-rules.js';
10
11
  import { shouldShowFunnel, recordFunnelShown } from './utils/funnel-msg-tracker.js';
11
12
  import './extractor/parsers/jsx-parser.js';
12
13
 
@@ -140,12 +141,12 @@ async function generateStatusReport(config) {
140
141
  const getLocalePluralCategories = (locale, isOrdinal) => {
141
142
  try {
142
143
  const type = isOrdinal ? 'ordinal' : 'cardinal';
143
- const pluralRules = new Intl.PluralRules(locale, { type });
144
+ const pluralRules = safePluralRules(locale, { type });
144
145
  return pluralRules.resolvedOptions().pluralCategories;
145
146
  }
146
147
  catch (e) {
147
148
  // Fallback to English if locale is invalid
148
- const fallbackRules = new Intl.PluralRules('en', { type: isOrdinal ? 'ordinal' : 'cardinal' });
149
+ const fallbackRules = safePluralRules('en', { type: isOrdinal ? 'ordinal' : 'cardinal' });
149
150
  return fallbackRules.resolvedOptions().pluralCategories;
150
151
  }
151
152
  };
@@ -8,6 +8,7 @@ import { resolveDefaultValue } from './utils/default-value.js';
8
8
  import { getOutputPath, loadTranslationFile, inferFormatFromPath, loadRawJson5Content, serializeTranslationFile } from './utils/file-utils.js';
9
9
  import { shouldShowFunnel, recordFunnelShown } from './utils/funnel-msg-tracker.js';
10
10
  import { getNestedKeys, getNestedValue, setNestedValue } from './utils/nested-object.js';
11
+ import { safePluralRules } from './utils/plural-rules.js';
11
12
 
12
13
  /**
13
14
  * Synchronizes translation files across different locales by ensuring all secondary
@@ -90,7 +91,7 @@ async function runSyncer(config, options = {}) {
90
91
  const sep = config.extract.pluralSeparator ?? '_';
91
92
  const localeCardinalCategories = (() => {
92
93
  try {
93
- return new Set(new Intl.PluralRules(lang, { type: 'cardinal' }).resolvedOptions().pluralCategories);
94
+ return new Set(safePluralRules(lang, { type: 'cardinal' }).resolvedOptions().pluralCategories);
94
95
  }
95
96
  catch {
96
97
  return new Set(['one', 'other']);
@@ -98,7 +99,7 @@ async function runSyncer(config, options = {}) {
98
99
  })();
99
100
  const localeOrdinalCategories = (() => {
100
101
  try {
101
- return new Set(new Intl.PluralRules(lang, { type: 'ordinal' }).resolvedOptions().pluralCategories);
102
+ return new Set(safePluralRules(lang, { type: 'ordinal' }).resolvedOptions().pluralCategories);
102
103
  }
103
104
  catch {
104
105
  return new Set(['one', 'other', 'two', 'few']);
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Creates an Intl.PluralRules instance, falling back to English ('en')
3
+ * if the given locale is not a valid BCP 47 language tag.
4
+ *
5
+ * This allows projects to use custom locale codes (e.g. 'E', 'F')
6
+ * that are not recognized by the Intl API.
7
+ */
8
+ function safePluralRules(locale, options) {
9
+ try {
10
+ return new Intl.PluralRules(locale, options);
11
+ }
12
+ catch {
13
+ return new Intl.PluralRules('en', options);
14
+ }
15
+ }
16
+
17
+ export { safePluralRules };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "i18next-cli",
3
- "version": "1.50.7",
3
+ "version": "1.51.0",
4
4
  "description": "A unified, high-performance i18next CLI.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1 +1 @@
1
- {"version":3,"file":"translation-manager.d.ts","sourceRoot":"","sources":["../../../src/extractor/core/translation-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAk5B9F;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,EAC/B,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,EACvB,MAAM,EAAE,oBAAoB,EAC5B,EACE,uBAA+B,EAC/B,OAAe,EACf,MAA4B,EAC7B,GAAE;IACD,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;CACX,GACL,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAoJ9B"}
1
+ {"version":3,"file":"translation-manager.d.ts","sourceRoot":"","sources":["../../../src/extractor/core/translation-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAi6B9F;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,EAC/B,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,EACvB,MAAM,EAAE,oBAAoB,EAC5B,EACE,uBAA+B,EAC/B,OAAe,EACf,MAA4B,EAC7B,GAAE;IACD,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;CACX,GACL,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAoJ9B"}
@@ -1 +1 @@
1
- {"version":3,"file":"call-expression-handler.d.ts","sourceRoot":"","sources":["../../../src/extractor/parsers/call-expression-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAA6C,MAAM,WAAW,CAAA;AAC1F,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,EAAgB,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1G,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAW7D,qBAAa,qBAAqB;IAChC,OAAO,CAAC,aAAa,CAAe;IACpC,OAAO,CAAC,MAAM,CAAuC;IACrD,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,kBAAkB,CAAoB;IACvC,UAAU,cAAoB;IACrC,OAAO,CAAC,cAAc,CAAc;IACpC,OAAO,CAAC,cAAc,CAAc;IACpC,OAAO,CAAC,iBAAiB,CAAsC;gBAG7D,MAAM,EAAE,IAAI,CAAC,oBAAoB,EAAE,SAAS,CAAC,EAC7C,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,MAAM,EACd,kBAAkB,EAAE,kBAAkB,EACtC,cAAc,EAAE,MAAM,MAAM,EAC5B,cAAc,EAAE,MAAM,MAAM,EAC5B,iBAAiB,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAA2B;IAW3E;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAiB3B;;;;;;;;;;;;;;OAcG;IACH,oBAAoB,CAAE,IAAI,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,GAAG,SAAS,GAAG,IAAI;IAyYxG;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA4BzB,OAAO,CAAC,oBAAoB;IAkF5B,OAAO,CAAC,wBAAwB;IAyEhC;;;;;;OAMG;IACH,OAAO,CAAC,4BAA4B;IA8BpC;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,sBAAsB;IA2C9B;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,gBAAgB;IAyMxB;;;;;;;;;OASG;IACH,OAAO,CAAC,eAAe;CA2BxB"}
1
+ {"version":3,"file":"call-expression-handler.d.ts","sourceRoot":"","sources":["../../../src/extractor/parsers/call-expression-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAA6C,MAAM,WAAW,CAAA;AAC1F,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,EAAgB,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1G,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAY7D,qBAAa,qBAAqB;IAChC,OAAO,CAAC,aAAa,CAAe;IACpC,OAAO,CAAC,MAAM,CAAuC;IACrD,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,kBAAkB,CAAoB;IACvC,UAAU,cAAoB;IACrC,OAAO,CAAC,cAAc,CAAc;IACpC,OAAO,CAAC,cAAc,CAAc;IACpC,OAAO,CAAC,iBAAiB,CAAsC;gBAG7D,MAAM,EAAE,IAAI,CAAC,oBAAoB,EAAE,SAAS,CAAC,EAC7C,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,MAAM,EACd,kBAAkB,EAAE,kBAAkB,EACtC,cAAc,EAAE,MAAM,MAAM,EAC5B,cAAc,EAAE,MAAM,MAAM,EAC5B,iBAAiB,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAA2B;IAW3E;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAiB3B;;;;;;;;;;;;;;OAcG;IACH,oBAAoB,CAAE,IAAI,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,GAAG,SAAS,GAAG,IAAI;IAyYxG;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA4BzB,OAAO,CAAC,oBAAoB;IAkF5B,OAAO,CAAC,wBAAwB;IAyEhC;;;;;;OAMG;IACH,OAAO,CAAC,4BAA4B;IA8BpC;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,sBAAsB;IA2C9B;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,gBAAgB;IAyMxB;;;;;;;;;OASG;IACH,OAAO,CAAC,eAAe;CA2BxB"}
@@ -1 +1 @@
1
- {"version":3,"file":"comment-parser.d.ts","sourceRoot":"","sources":["../../../src/extractor/parsers/comment-parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AAMzE;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,oBAAoB,EAC5B,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,GAC1F,IAAI,CAqJN"}
1
+ {"version":3,"file":"comment-parser.d.ts","sourceRoot":"","sources":["../../../src/extractor/parsers/comment-parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AAOzE;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,oBAAoB,EAC5B,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,GAC1F,IAAI,CAqJN"}
@@ -1 +1 @@
1
- {"version":3,"file":"jsx-handler.d.ts","sourceRoot":"","sources":["../../../src/extractor/parsers/jsx-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAoB,MAAM,WAAW,CAAA;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAgB,MAAM,gBAAgB,CAAA;AACvF,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAQ7D,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAuC;IACrD,OAAO,CAAC,aAAa,CAAe;IACpC,OAAO,CAAC,kBAAkB,CAAoB;IAC9C,OAAO,CAAC,cAAc,CAAc;IACpC,OAAO,CAAC,cAAc,CAAc;gBAGlC,MAAM,EAAE,IAAI,CAAC,oBAAoB,EAAE,SAAS,CAAC,EAC7C,aAAa,EAAE,aAAa,EAC5B,kBAAkB,EAAE,kBAAkB,EACtC,cAAc,EAAE,MAAM,MAAM,EAC5B,cAAc,EAAE,MAAM,MAAM;IAS9B;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAK3B;;;;;;;;OAQG;IACH,gBAAgB,CAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,GAAG,IAAI;IAyUjI;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,0BAA0B;IAkIlC;;;;;;;;;OASG;IACH,OAAO,CAAC,cAAc;CAevB"}
1
+ {"version":3,"file":"jsx-handler.d.ts","sourceRoot":"","sources":["../../../src/extractor/parsers/jsx-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAoB,MAAM,WAAW,CAAA;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAgB,MAAM,gBAAgB,CAAA;AACvF,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAS7D,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAuC;IACrD,OAAO,CAAC,aAAa,CAAe;IACpC,OAAO,CAAC,kBAAkB,CAAoB;IAC9C,OAAO,CAAC,cAAc,CAAc;IACpC,OAAO,CAAC,cAAc,CAAc;gBAGlC,MAAM,EAAE,IAAI,CAAC,oBAAoB,EAAE,SAAS,CAAC,EAC7C,aAAa,EAAE,aAAa,EAC5B,kBAAkB,EAAE,kBAAkB,EACtC,cAAc,EAAE,MAAM,MAAM,EAC5B,cAAc,EAAE,MAAM,MAAM;IAS9B;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAK3B;;;;;;;;OAQG;IACH,gBAAgB,CAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,GAAG,IAAI;IAyUjI;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,0BAA0B;IAkIlC;;;;;;;;;OASG;IACH,OAAO,CAAC,cAAc;CAevB"}
@@ -1 +1 @@
1
- {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,oBAAoB,EAAgB,MAAM,YAAY,CAAA;AAIpE;;GAEG;AACH,UAAU,aAAa;IACrB,0EAA0E;IAC1E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uEAAuE;IACvE,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAqDD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,SAAS,CAAE,MAAM,EAAE,oBAAoB,EAAE,OAAO,GAAE,aAAkB,iBAuBzF"}
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,oBAAoB,EAAgB,MAAM,YAAY,CAAA;AAKpE;;GAEG;AACH,UAAU,aAAa;IACrB,0EAA0E;IAC1E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uEAAuE;IACvE,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAqDD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,SAAS,CAAE,MAAM,EAAE,oBAAoB,EAAE,OAAO,GAAE,aAAkB,iBAuBzF"}
@@ -1 +1 @@
1
- {"version":3,"file":"syncer.d.ts","sourceRoot":"","sources":["../src/syncer.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAM9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAsB,SAAS,CAC7B,MAAM,EAAE,oBAAoB,EAC5B,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,iBA+LnD"}
1
+ {"version":3,"file":"syncer.d.ts","sourceRoot":"","sources":["../src/syncer.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAO9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAsB,SAAS,CAC7B,MAAM,EAAE,oBAAoB,EAC5B,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,iBA+LnD"}
package/types/types.d.ts CHANGED
@@ -134,6 +134,14 @@ export interface I18nextToolkitConfig {
134
134
  extractFromComments?: boolean;
135
135
  generateBasePluralForms?: boolean;
136
136
  disablePlurals?: boolean;
137
+ /**
138
+ * When true, generates all 6 CLDR plural forms (zero, one, two, few, many, other)
139
+ * for every language, including the primary language.
140
+ * Useful when secondary languages need plural forms that the primary language doesn't have,
141
+ * and you want a consistent set of keys across all locales.
142
+ * (default: false)
143
+ */
144
+ allPluralForms?: boolean;
137
145
  /**
138
146
  * Prefix for nested translations.
139
147
  * (default: '$t(')
@@ -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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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Creates an Intl.PluralRules instance, falling back to English ('en')
3
+ * if the given locale is not a valid BCP 47 language tag.
4
+ *
5
+ * This allows projects to use custom locale codes (e.g. 'E', 'F')
6
+ * that are not recognized by the Intl API.
7
+ */
8
+ export declare function safePluralRules(locale: string, options?: Intl.PluralRulesOptions): Intl.PluralRules;
9
+ //# sourceMappingURL=plural-rules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plural-rules.d.ts","sourceRoot":"","sources":["../../src/utils/plural-rules.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,WAAW,CAMpG"}