i18next-cli 1.64.1 → 1.65.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 +1 -1
- package/dist/cjs/cli.js +1 -1
- package/dist/cjs/extractor/core/translation-manager.js +116 -0
- package/dist/cjs/status.js +53 -18
- package/dist/cjs/types-generator.js +5 -1
- package/dist/esm/cli.js +1 -1
- package/dist/esm/extractor/core/translation-manager.js +116 -0
- package/dist/esm/status.js +53 -18
- package/dist/esm/types-generator.js +5 -1
- package/package.json +1 -1
- package/types/extractor/core/translation-manager.d.ts.map +1 -1
- package/types/status.d.ts.map +1 -1
- package/types/types-generator.d.ts.map +1 -1
- package/types/types.d.ts +7 -2
- package/types/types.d.ts.map +1 -1
package/README.md
CHANGED
|
@@ -800,7 +800,7 @@ export default defineConfig({
|
|
|
800
800
|
|
|
801
801
|
// Namespace and key configuration
|
|
802
802
|
defaultNS: 'translation', // If set to false it will not generate any namespace, useful if i.e. the output is a single language json with 1 namespace (and no nesting).
|
|
803
|
-
fallbackNS: 'fallback', // Namespace to use as fallback when a key is missing in the current namespace for a locale. (default undefined)
|
|
803
|
+
fallbackNS: 'fallback', // Namespace(s) (string or array, like the i18next option) to use as fallback when a key is missing in the current namespace for a locale. Keys already translated in a fallback namespace are not duplicated into other namespace files by `extract`. (default undefined)
|
|
804
804
|
nsSeparator: ':',
|
|
805
805
|
keySeparator: '.', // Or `false` to disable nesting and use flat keys
|
|
806
806
|
contextSeparator: '_',
|
package/dist/cjs/cli.js
CHANGED
|
@@ -37,7 +37,7 @@ const program = new commander.Command();
|
|
|
37
37
|
program
|
|
38
38
|
.name('i18next-cli')
|
|
39
39
|
.description('A unified, high-performance i18next CLI.')
|
|
40
|
-
.version('1.
|
|
40
|
+
.version('1.65.0'); // This string is replaced with the actual version at build time by rollup
|
|
41
41
|
// new: global config override option
|
|
42
42
|
program.option('-c, --config <path>', 'Path to i18next-cli config file (overrides detection)');
|
|
43
43
|
program
|
|
@@ -940,6 +940,115 @@ function buildNewTranslationsForNs(nsKeys, existingTranslations, config, locale,
|
|
|
940
940
|
}
|
|
941
941
|
return newTranslations;
|
|
942
942
|
}
|
|
943
|
+
/**
|
|
944
|
+
* Moves extracted keys that are already translated in a fallback namespace out
|
|
945
|
+
* of their extracted namespace bucket and into the fallback namespace bucket.
|
|
946
|
+
*
|
|
947
|
+
* Mirrors the i18next runtime lookup order: the requested namespace wins when
|
|
948
|
+
* it has a value for the key, otherwise the fallback namespaces are consulted
|
|
949
|
+
* in order (`fallbackNS` may be a string or an array of strings).
|
|
950
|
+
*
|
|
951
|
+
* Existence is decided against the primary language files on disk:
|
|
952
|
+
* - A key that already has a non-empty value in its own namespace file is an
|
|
953
|
+
* intentional per-namespace override and stays where it was extracted.
|
|
954
|
+
* - Otherwise, the first fallback namespace containing a non-empty value for
|
|
955
|
+
* the key claims it. The key is re-bucketed there so `removeUnusedKeys`
|
|
956
|
+
* treats it as used and preserves it.
|
|
957
|
+
* - Keys found in no fallback namespace are new and stay in their extracted
|
|
958
|
+
* namespace, matching the i18next `saveMissing` behavior.
|
|
959
|
+
*/
|
|
960
|
+
async function reattributeFallbackNsKeys(keysByNS, noNsToken, config, primaryLanguage) {
|
|
961
|
+
const rawFallbackNS = config.extract.fallbackNS;
|
|
962
|
+
const fallbackNamespaces = !rawFallbackNS
|
|
963
|
+
? []
|
|
964
|
+
: (Array.isArray(rawFallbackNS) ? rawFallbackNS : [rawFallbackNS]).filter((ns) => typeof ns === 'string' && ns.length > 0);
|
|
965
|
+
if (fallbackNamespaces.length === 0)
|
|
966
|
+
return;
|
|
967
|
+
const keySeparator = config.extract.keySeparator ?? '.';
|
|
968
|
+
const pluralSeparator = config.extract.pluralSeparator ?? '_';
|
|
969
|
+
// Same merged-output detection as the per-locale loop in getTranslations.
|
|
970
|
+
const shouldMerge = config.extract.mergeNamespaces || (typeof config.extract.output === 'string' ? !config.extract.output.includes('{{namespace}}') : false);
|
|
971
|
+
const mergedPrimaryFile = shouldMerge
|
|
972
|
+
? (await fileUtils.loadTranslationFile(node_path.resolve(process.cwd(), fileUtils.getOutputPath(config.extract.output, primaryLanguage))) || {})
|
|
973
|
+
: null;
|
|
974
|
+
const catalogCache = new Map();
|
|
975
|
+
const loadPrimaryCatalog = async (ns, isFallback) => {
|
|
976
|
+
const cacheKey = `${isFallback ? 'fb' : 'own'}:${ns}`;
|
|
977
|
+
let catalog = catalogCache.get(cacheKey);
|
|
978
|
+
if (!catalog) {
|
|
979
|
+
if (mergedPrimaryFile) {
|
|
980
|
+
// In merged mode the fallback keys may live at the top level when the
|
|
981
|
+
// file is not namespaced (same resolution as the status command).
|
|
982
|
+
catalog = mergedPrimaryFile[ns] ?? (isFallback ? mergedPrimaryFile : {});
|
|
983
|
+
}
|
|
984
|
+
else {
|
|
985
|
+
catalog = await fileUtils.loadTranslationFile(node_path.resolve(process.cwd(), fileUtils.getOutputPath(config.extract.output, primaryLanguage, ns))) || {};
|
|
986
|
+
}
|
|
987
|
+
catalogCache.set(cacheKey, catalog);
|
|
988
|
+
}
|
|
989
|
+
return catalog;
|
|
990
|
+
};
|
|
991
|
+
// Plural categories of the primary language, used to recognise a base
|
|
992
|
+
// count-key (e.g. "item") through its expanded variants ("item_one", …).
|
|
993
|
+
const primaryCardinalCategories = pluralRules.safePluralRules(primaryLanguage, { type: 'cardinal' }).resolvedOptions().pluralCategories;
|
|
994
|
+
const primaryOrdinalCategories = pluralRules.safePluralRules(primaryLanguage, { type: 'ordinal' }).resolvedOptions().pluralCategories;
|
|
995
|
+
const hasTranslation = (catalog, extractedKey) => {
|
|
996
|
+
const isTranslated = (value) => value !== undefined && value !== null && value !== '';
|
|
997
|
+
if (isTranslated(nestedObject.getNestedValue(catalog, extractedKey.key, keySeparator)))
|
|
998
|
+
return true;
|
|
999
|
+
if (extractedKey.hasCount && !config.extract.disablePlurals && !extractedKey.isExpandedPlural) {
|
|
1000
|
+
const categories = extractedKey.isOrdinal ? primaryOrdinalCategories : primaryCardinalCategories;
|
|
1001
|
+
return categories.some(category => {
|
|
1002
|
+
const variant = extractedKey.isOrdinal
|
|
1003
|
+
? `${extractedKey.key}${pluralSeparator}ordinal${pluralSeparator}${category}`
|
|
1004
|
+
: `${extractedKey.key}${pluralSeparator}${category}`;
|
|
1005
|
+
return isTranslated(nestedObject.getNestedValue(catalog, variant, keySeparator));
|
|
1006
|
+
});
|
|
1007
|
+
}
|
|
1008
|
+
return false;
|
|
1009
|
+
};
|
|
1010
|
+
for (const [nsKey, nsKeys] of [...keysByNS.entries()]) {
|
|
1011
|
+
if (nsKey === noNsToken || fallbackNamespaces.includes(nsKey))
|
|
1012
|
+
continue;
|
|
1013
|
+
const ownCatalog = await loadPrimaryCatalog(nsKey, false);
|
|
1014
|
+
const keptKeys = [];
|
|
1015
|
+
for (const extractedKey of nsKeys) {
|
|
1016
|
+
// A key with a real value in its own namespace file is an intentional
|
|
1017
|
+
// per-namespace override — keep extracting it into that namespace.
|
|
1018
|
+
if (hasTranslation(ownCatalog, extractedKey)) {
|
|
1019
|
+
keptKeys.push(extractedKey);
|
|
1020
|
+
continue;
|
|
1021
|
+
}
|
|
1022
|
+
let claimedBy;
|
|
1023
|
+
for (const fallbackNs of fallbackNamespaces) {
|
|
1024
|
+
if (hasTranslation(await loadPrimaryCatalog(fallbackNs, true), extractedKey)) {
|
|
1025
|
+
claimedBy = fallbackNs;
|
|
1026
|
+
break;
|
|
1027
|
+
}
|
|
1028
|
+
}
|
|
1029
|
+
if (claimedBy) {
|
|
1030
|
+
if (!keysByNS.has(claimedBy))
|
|
1031
|
+
keysByNS.set(claimedBy, []);
|
|
1032
|
+
keysByNS.get(claimedBy).push({ ...extractedKey, ns: claimedBy, nsIsImplicit: false });
|
|
1033
|
+
}
|
|
1034
|
+
else {
|
|
1035
|
+
keptKeys.push(extractedKey);
|
|
1036
|
+
}
|
|
1037
|
+
}
|
|
1038
|
+
if (keptKeys.length !== nsKeys.length) {
|
|
1039
|
+
if (keptKeys.length > 0) {
|
|
1040
|
+
keysByNS.set(nsKey, keptKeys);
|
|
1041
|
+
}
|
|
1042
|
+
else {
|
|
1043
|
+
// Every key moved to a fallback namespace: drop the bucket so a brand
|
|
1044
|
+
// new (empty) namespace file is not created. If the file already
|
|
1045
|
+
// exists on disk it is still processed via the on-disk namespace scan
|
|
1046
|
+
// and cleaned up by `removeUnusedKeys`.
|
|
1047
|
+
keysByNS.delete(nsKey);
|
|
1048
|
+
}
|
|
1049
|
+
}
|
|
1050
|
+
}
|
|
1051
|
+
}
|
|
943
1052
|
/**
|
|
944
1053
|
* Processes extracted translation keys and generates translation files for all configured locales.
|
|
945
1054
|
*
|
|
@@ -1000,6 +1109,13 @@ async function getTranslations(keys, objectKeys, config, { syncPrimaryWithDefaul
|
|
|
1000
1109
|
for (const ns of ignoreNamespaces) {
|
|
1001
1110
|
keysByNS.delete(ns);
|
|
1002
1111
|
}
|
|
1112
|
+
// Respect fallbackNS (#272): a key extracted for another namespace that is
|
|
1113
|
+
// already translated in a fallback namespace resolves at runtime through the
|
|
1114
|
+
// fallback chain, so it must not be duplicated into that namespace's file.
|
|
1115
|
+
// Re-attribute such keys to the fallback namespace bucket instead — this both
|
|
1116
|
+
// suppresses the duplicate and marks the key as "used" in the fallback
|
|
1117
|
+
// namespace so `removeUnusedKeys` does not prune it there.
|
|
1118
|
+
await reattributeFallbackNsKeys(keysByNS, NO_NS_TOKEN, config, primaryLanguage);
|
|
1003
1119
|
const results = [];
|
|
1004
1120
|
const userIgnore = Array.isArray(config.extract.ignore)
|
|
1005
1121
|
? config.extract.ignore
|
package/dist/cjs/status.js
CHANGED
|
@@ -100,20 +100,44 @@ async function runStatus(config, options = {}) {
|
|
|
100
100
|
const report = await generateStatusReport(config);
|
|
101
101
|
spinner.succeed('Analysis complete.');
|
|
102
102
|
await displayStatusReport(report, config, options);
|
|
103
|
+
// When a specific locale is requested (`status <locale>`), the pass/fail
|
|
104
|
+
// result must reflect THAT locale only — otherwise the displayed summary
|
|
105
|
+
// (which is scoped to the requested locale) can contradict the exit code
|
|
106
|
+
// by failing on an unrelated secondary language. See issue #271.
|
|
107
|
+
const scopedLocale = options.detail && config.locales.includes(options.detail)
|
|
108
|
+
? options.detail
|
|
109
|
+
: undefined;
|
|
103
110
|
let hasMissing = false;
|
|
104
|
-
|
|
105
|
-
if (
|
|
106
|
-
|
|
107
|
-
|
|
111
|
+
if (scopedLocale) {
|
|
112
|
+
if (scopedLocale === config.extract.primaryLanguage) {
|
|
113
|
+
// The primary language fails only on absent keys (used in code but
|
|
114
|
+
// missing from the file); empty placeholders are deliberate.
|
|
115
|
+
hasMissing = !!report.primary && report.primary.totalAbsent > 0;
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
const localeData = report.locales.get(scopedLocale);
|
|
119
|
+
hasMissing = !!localeData && localeData.totalTranslated < localeData.totalKeys;
|
|
108
120
|
}
|
|
109
121
|
}
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
122
|
+
else {
|
|
123
|
+
for (const [, localeData] of report.locales.entries()) {
|
|
124
|
+
if (localeData.totalTranslated < localeData.totalKeys) {
|
|
125
|
+
hasMissing = true;
|
|
126
|
+
break;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
// The primary language fails the check only on absent keys (used in code but
|
|
130
|
+
// missing from the translation file); empty placeholders are tolerated.
|
|
131
|
+
if (!hasMissing && report.primary && report.primary.totalAbsent > 0) {
|
|
132
|
+
hasMissing = true;
|
|
133
|
+
}
|
|
114
134
|
}
|
|
115
135
|
if (hasMissing) {
|
|
116
|
-
|
|
136
|
+
// Name the locale when the check is scoped so the failure reason is clear
|
|
137
|
+
// (the displayed summary already explains what is missing for it).
|
|
138
|
+
spinner.fail(scopedLocale
|
|
139
|
+
? `Error: Incomplete translations detected for "${scopedLocale}".`
|
|
140
|
+
: 'Error: Incomplete translations detected.');
|
|
117
141
|
process.exit(1);
|
|
118
142
|
}
|
|
119
143
|
}
|
|
@@ -142,6 +166,10 @@ async function generateStatusReport(config) {
|
|
|
142
166
|
const { allKeys: allExtractedKeys } = await keyFinder.findKeys(config);
|
|
143
167
|
const { secondaryLanguages, keySeparator = '.', defaultNS = 'translation', mergeNamespaces = false, pluralSeparator = '_', contextSeparator = '_', fallbackNS } = config.extract;
|
|
144
168
|
const primaryLanguage = config.extract.primaryLanguage || config.locales[0] || 'en';
|
|
169
|
+
// Normalize fallbackNS like the i18next runtime: string | string[] -> string[]
|
|
170
|
+
const fallbackNamespaces = !fallbackNS
|
|
171
|
+
? []
|
|
172
|
+
: (Array.isArray(fallbackNS) ? fallbackNS : [fallbackNS]).filter((ns) => typeof ns === 'string' && ns.length > 0);
|
|
145
173
|
const keysByNs = new Map();
|
|
146
174
|
for (const key of allExtractedKeys.values()) {
|
|
147
175
|
const ns = key.ns || defaultNS || 'translation';
|
|
@@ -284,15 +312,17 @@ async function generateStatusReport(config) {
|
|
|
284
312
|
// when mergedTranslations[ns] is missing.
|
|
285
313
|
? (mergedTranslations?.[ns] ?? mergedTranslations ?? {})
|
|
286
314
|
: await fileUtils.loadTranslationFile(node_path.resolve(process.cwd(), fileUtils.getOutputPath(config.extract.output, locale, ns))) || {};
|
|
287
|
-
// Load fallbackNS translations if configured
|
|
288
|
-
|
|
289
|
-
|
|
315
|
+
// Load fallbackNS translations if configured (looked up in order, like the i18next runtime)
|
|
316
|
+
const fallbackTranslationsList = [];
|
|
317
|
+
for (const fallbackNs of fallbackNamespaces) {
|
|
318
|
+
if (ns === fallbackNs)
|
|
319
|
+
continue;
|
|
290
320
|
if (mergeNamespaces) {
|
|
291
|
-
// In merged mode, fallbackNS keys are in mergedTranslations under
|
|
292
|
-
|
|
321
|
+
// In merged mode, fallbackNS keys are in mergedTranslations under the fallback namespace
|
|
322
|
+
fallbackTranslationsList.push(mergedTranslations?.[fallbackNs] ?? mergedTranslations ?? {});
|
|
293
323
|
}
|
|
294
324
|
else {
|
|
295
|
-
|
|
325
|
+
fallbackTranslationsList.push(await fileUtils.loadTranslationFile(node_path.resolve(process.cwd(), fileUtils.getOutputPath(config.extract.output, locale, fallbackNs))) || {});
|
|
296
326
|
}
|
|
297
327
|
}
|
|
298
328
|
let translatedInNs = 0;
|
|
@@ -329,9 +359,14 @@ async function generateStatusReport(config) {
|
|
|
329
359
|
// Only fall back when the key is genuinely absent from the primary file.
|
|
330
360
|
// An empty string is intentional (placeholder from extract) — don't hide it.
|
|
331
361
|
let state = primaryState;
|
|
332
|
-
if (primaryState === 'absent'
|
|
333
|
-
const
|
|
334
|
-
|
|
362
|
+
if (primaryState === 'absent') {
|
|
363
|
+
for (const fallbackTranslations of fallbackTranslationsList) {
|
|
364
|
+
const fallbackState = classifyValue(nestedObject.getNestedValue(fallbackTranslations, key, sep));
|
|
365
|
+
if (fallbackState !== 'absent') {
|
|
366
|
+
state = fallbackState;
|
|
367
|
+
break;
|
|
368
|
+
}
|
|
369
|
+
}
|
|
335
370
|
}
|
|
336
371
|
// For the primary language the file itself is the source of values, so an
|
|
337
372
|
// empty placeholder still means the key is present. Only a truly absent
|
|
@@ -191,7 +191,11 @@ ${i18nextResourcesForTs.mergeResourcesAsInterface(resources, { optimize: !!enabl
|
|
|
191
191
|
const importPath = node_path.relative(node_path.dirname(outputPath), resourcesOutputPath)
|
|
192
192
|
.replace(/\\/g, '/').replace(/\.d\.ts$/, ''); // Make it a valid module path
|
|
193
193
|
const defaultNS = config.extract.defaultNS === false ? 'false' : `'${config.extract.defaultNS || 'translation'}'`;
|
|
194
|
-
const fallbackNS = config.extract.fallbackNS === false
|
|
194
|
+
const fallbackNS = config.extract.fallbackNS === false
|
|
195
|
+
? 'false'
|
|
196
|
+
: Array.isArray(config.extract.fallbackNS)
|
|
197
|
+
? `[${config.extract.fallbackNS.map(ns => `'${ns}'`).join(', ')}]`
|
|
198
|
+
: `'${config.extract.fallbackNS}'`;
|
|
195
199
|
const fileContent = `// This file is automatically generated by i18next-cli, because it was not existing. You can edit it based on your needs: https://www.i18next.com/overview/typescript#custom-type-options
|
|
196
200
|
import type Resources from './${importPath}';
|
|
197
201
|
|
package/dist/esm/cli.js
CHANGED
|
@@ -31,7 +31,7 @@ const program = new Command();
|
|
|
31
31
|
program
|
|
32
32
|
.name('i18next-cli')
|
|
33
33
|
.description('A unified, high-performance i18next CLI.')
|
|
34
|
-
.version('1.
|
|
34
|
+
.version('1.65.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
|
|
@@ -938,6 +938,115 @@ function buildNewTranslationsForNs(nsKeys, existingTranslations, config, locale,
|
|
|
938
938
|
}
|
|
939
939
|
return newTranslations;
|
|
940
940
|
}
|
|
941
|
+
/**
|
|
942
|
+
* Moves extracted keys that are already translated in a fallback namespace out
|
|
943
|
+
* of their extracted namespace bucket and into the fallback namespace bucket.
|
|
944
|
+
*
|
|
945
|
+
* Mirrors the i18next runtime lookup order: the requested namespace wins when
|
|
946
|
+
* it has a value for the key, otherwise the fallback namespaces are consulted
|
|
947
|
+
* in order (`fallbackNS` may be a string or an array of strings).
|
|
948
|
+
*
|
|
949
|
+
* Existence is decided against the primary language files on disk:
|
|
950
|
+
* - A key that already has a non-empty value in its own namespace file is an
|
|
951
|
+
* intentional per-namespace override and stays where it was extracted.
|
|
952
|
+
* - Otherwise, the first fallback namespace containing a non-empty value for
|
|
953
|
+
* the key claims it. The key is re-bucketed there so `removeUnusedKeys`
|
|
954
|
+
* treats it as used and preserves it.
|
|
955
|
+
* - Keys found in no fallback namespace are new and stay in their extracted
|
|
956
|
+
* namespace, matching the i18next `saveMissing` behavior.
|
|
957
|
+
*/
|
|
958
|
+
async function reattributeFallbackNsKeys(keysByNS, noNsToken, config, primaryLanguage) {
|
|
959
|
+
const rawFallbackNS = config.extract.fallbackNS;
|
|
960
|
+
const fallbackNamespaces = !rawFallbackNS
|
|
961
|
+
? []
|
|
962
|
+
: (Array.isArray(rawFallbackNS) ? rawFallbackNS : [rawFallbackNS]).filter((ns) => typeof ns === 'string' && ns.length > 0);
|
|
963
|
+
if (fallbackNamespaces.length === 0)
|
|
964
|
+
return;
|
|
965
|
+
const keySeparator = config.extract.keySeparator ?? '.';
|
|
966
|
+
const pluralSeparator = config.extract.pluralSeparator ?? '_';
|
|
967
|
+
// Same merged-output detection as the per-locale loop in getTranslations.
|
|
968
|
+
const shouldMerge = config.extract.mergeNamespaces || (typeof config.extract.output === 'string' ? !config.extract.output.includes('{{namespace}}') : false);
|
|
969
|
+
const mergedPrimaryFile = shouldMerge
|
|
970
|
+
? (await loadTranslationFile(resolve(process.cwd(), getOutputPath(config.extract.output, primaryLanguage))) || {})
|
|
971
|
+
: null;
|
|
972
|
+
const catalogCache = new Map();
|
|
973
|
+
const loadPrimaryCatalog = async (ns, isFallback) => {
|
|
974
|
+
const cacheKey = `${isFallback ? 'fb' : 'own'}:${ns}`;
|
|
975
|
+
let catalog = catalogCache.get(cacheKey);
|
|
976
|
+
if (!catalog) {
|
|
977
|
+
if (mergedPrimaryFile) {
|
|
978
|
+
// In merged mode the fallback keys may live at the top level when the
|
|
979
|
+
// file is not namespaced (same resolution as the status command).
|
|
980
|
+
catalog = mergedPrimaryFile[ns] ?? (isFallback ? mergedPrimaryFile : {});
|
|
981
|
+
}
|
|
982
|
+
else {
|
|
983
|
+
catalog = await loadTranslationFile(resolve(process.cwd(), getOutputPath(config.extract.output, primaryLanguage, ns))) || {};
|
|
984
|
+
}
|
|
985
|
+
catalogCache.set(cacheKey, catalog);
|
|
986
|
+
}
|
|
987
|
+
return catalog;
|
|
988
|
+
};
|
|
989
|
+
// Plural categories of the primary language, used to recognise a base
|
|
990
|
+
// count-key (e.g. "item") through its expanded variants ("item_one", …).
|
|
991
|
+
const primaryCardinalCategories = safePluralRules(primaryLanguage, { type: 'cardinal' }).resolvedOptions().pluralCategories;
|
|
992
|
+
const primaryOrdinalCategories = safePluralRules(primaryLanguage, { type: 'ordinal' }).resolvedOptions().pluralCategories;
|
|
993
|
+
const hasTranslation = (catalog, extractedKey) => {
|
|
994
|
+
const isTranslated = (value) => value !== undefined && value !== null && value !== '';
|
|
995
|
+
if (isTranslated(getNestedValue(catalog, extractedKey.key, keySeparator)))
|
|
996
|
+
return true;
|
|
997
|
+
if (extractedKey.hasCount && !config.extract.disablePlurals && !extractedKey.isExpandedPlural) {
|
|
998
|
+
const categories = extractedKey.isOrdinal ? primaryOrdinalCategories : primaryCardinalCategories;
|
|
999
|
+
return categories.some(category => {
|
|
1000
|
+
const variant = extractedKey.isOrdinal
|
|
1001
|
+
? `${extractedKey.key}${pluralSeparator}ordinal${pluralSeparator}${category}`
|
|
1002
|
+
: `${extractedKey.key}${pluralSeparator}${category}`;
|
|
1003
|
+
return isTranslated(getNestedValue(catalog, variant, keySeparator));
|
|
1004
|
+
});
|
|
1005
|
+
}
|
|
1006
|
+
return false;
|
|
1007
|
+
};
|
|
1008
|
+
for (const [nsKey, nsKeys] of [...keysByNS.entries()]) {
|
|
1009
|
+
if (nsKey === noNsToken || fallbackNamespaces.includes(nsKey))
|
|
1010
|
+
continue;
|
|
1011
|
+
const ownCatalog = await loadPrimaryCatalog(nsKey, false);
|
|
1012
|
+
const keptKeys = [];
|
|
1013
|
+
for (const extractedKey of nsKeys) {
|
|
1014
|
+
// A key with a real value in its own namespace file is an intentional
|
|
1015
|
+
// per-namespace override — keep extracting it into that namespace.
|
|
1016
|
+
if (hasTranslation(ownCatalog, extractedKey)) {
|
|
1017
|
+
keptKeys.push(extractedKey);
|
|
1018
|
+
continue;
|
|
1019
|
+
}
|
|
1020
|
+
let claimedBy;
|
|
1021
|
+
for (const fallbackNs of fallbackNamespaces) {
|
|
1022
|
+
if (hasTranslation(await loadPrimaryCatalog(fallbackNs, true), extractedKey)) {
|
|
1023
|
+
claimedBy = fallbackNs;
|
|
1024
|
+
break;
|
|
1025
|
+
}
|
|
1026
|
+
}
|
|
1027
|
+
if (claimedBy) {
|
|
1028
|
+
if (!keysByNS.has(claimedBy))
|
|
1029
|
+
keysByNS.set(claimedBy, []);
|
|
1030
|
+
keysByNS.get(claimedBy).push({ ...extractedKey, ns: claimedBy, nsIsImplicit: false });
|
|
1031
|
+
}
|
|
1032
|
+
else {
|
|
1033
|
+
keptKeys.push(extractedKey);
|
|
1034
|
+
}
|
|
1035
|
+
}
|
|
1036
|
+
if (keptKeys.length !== nsKeys.length) {
|
|
1037
|
+
if (keptKeys.length > 0) {
|
|
1038
|
+
keysByNS.set(nsKey, keptKeys);
|
|
1039
|
+
}
|
|
1040
|
+
else {
|
|
1041
|
+
// Every key moved to a fallback namespace: drop the bucket so a brand
|
|
1042
|
+
// new (empty) namespace file is not created. If the file already
|
|
1043
|
+
// exists on disk it is still processed via the on-disk namespace scan
|
|
1044
|
+
// and cleaned up by `removeUnusedKeys`.
|
|
1045
|
+
keysByNS.delete(nsKey);
|
|
1046
|
+
}
|
|
1047
|
+
}
|
|
1048
|
+
}
|
|
1049
|
+
}
|
|
941
1050
|
/**
|
|
942
1051
|
* Processes extracted translation keys and generates translation files for all configured locales.
|
|
943
1052
|
*
|
|
@@ -998,6 +1107,13 @@ async function getTranslations(keys, objectKeys, config, { syncPrimaryWithDefaul
|
|
|
998
1107
|
for (const ns of ignoreNamespaces) {
|
|
999
1108
|
keysByNS.delete(ns);
|
|
1000
1109
|
}
|
|
1110
|
+
// Respect fallbackNS (#272): a key extracted for another namespace that is
|
|
1111
|
+
// already translated in a fallback namespace resolves at runtime through the
|
|
1112
|
+
// fallback chain, so it must not be duplicated into that namespace's file.
|
|
1113
|
+
// Re-attribute such keys to the fallback namespace bucket instead — this both
|
|
1114
|
+
// suppresses the duplicate and marks the key as "used" in the fallback
|
|
1115
|
+
// namespace so `removeUnusedKeys` does not prune it there.
|
|
1116
|
+
await reattributeFallbackNsKeys(keysByNS, NO_NS_TOKEN, config, primaryLanguage);
|
|
1001
1117
|
const results = [];
|
|
1002
1118
|
const userIgnore = Array.isArray(config.extract.ignore)
|
|
1003
1119
|
? config.extract.ignore
|
package/dist/esm/status.js
CHANGED
|
@@ -94,20 +94,44 @@ async function runStatus(config, options = {}) {
|
|
|
94
94
|
const report = await generateStatusReport(config);
|
|
95
95
|
spinner.succeed('Analysis complete.');
|
|
96
96
|
await displayStatusReport(report, config, options);
|
|
97
|
+
// When a specific locale is requested (`status <locale>`), the pass/fail
|
|
98
|
+
// result must reflect THAT locale only — otherwise the displayed summary
|
|
99
|
+
// (which is scoped to the requested locale) can contradict the exit code
|
|
100
|
+
// by failing on an unrelated secondary language. See issue #271.
|
|
101
|
+
const scopedLocale = options.detail && config.locales.includes(options.detail)
|
|
102
|
+
? options.detail
|
|
103
|
+
: undefined;
|
|
97
104
|
let hasMissing = false;
|
|
98
|
-
|
|
99
|
-
if (
|
|
100
|
-
|
|
101
|
-
|
|
105
|
+
if (scopedLocale) {
|
|
106
|
+
if (scopedLocale === config.extract.primaryLanguage) {
|
|
107
|
+
// The primary language fails only on absent keys (used in code but
|
|
108
|
+
// missing from the file); empty placeholders are deliberate.
|
|
109
|
+
hasMissing = !!report.primary && report.primary.totalAbsent > 0;
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
const localeData = report.locales.get(scopedLocale);
|
|
113
|
+
hasMissing = !!localeData && localeData.totalTranslated < localeData.totalKeys;
|
|
102
114
|
}
|
|
103
115
|
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
116
|
+
else {
|
|
117
|
+
for (const [, localeData] of report.locales.entries()) {
|
|
118
|
+
if (localeData.totalTranslated < localeData.totalKeys) {
|
|
119
|
+
hasMissing = true;
|
|
120
|
+
break;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// The primary language fails the check only on absent keys (used in code but
|
|
124
|
+
// missing from the translation file); empty placeholders are tolerated.
|
|
125
|
+
if (!hasMissing && report.primary && report.primary.totalAbsent > 0) {
|
|
126
|
+
hasMissing = true;
|
|
127
|
+
}
|
|
108
128
|
}
|
|
109
129
|
if (hasMissing) {
|
|
110
|
-
|
|
130
|
+
// Name the locale when the check is scoped so the failure reason is clear
|
|
131
|
+
// (the displayed summary already explains what is missing for it).
|
|
132
|
+
spinner.fail(scopedLocale
|
|
133
|
+
? `Error: Incomplete translations detected for "${scopedLocale}".`
|
|
134
|
+
: 'Error: Incomplete translations detected.');
|
|
111
135
|
process.exit(1);
|
|
112
136
|
}
|
|
113
137
|
}
|
|
@@ -136,6 +160,10 @@ async function generateStatusReport(config) {
|
|
|
136
160
|
const { allKeys: allExtractedKeys } = await findKeys(config);
|
|
137
161
|
const { secondaryLanguages, keySeparator = '.', defaultNS = 'translation', mergeNamespaces = false, pluralSeparator = '_', contextSeparator = '_', fallbackNS } = config.extract;
|
|
138
162
|
const primaryLanguage = config.extract.primaryLanguage || config.locales[0] || 'en';
|
|
163
|
+
// Normalize fallbackNS like the i18next runtime: string | string[] -> string[]
|
|
164
|
+
const fallbackNamespaces = !fallbackNS
|
|
165
|
+
? []
|
|
166
|
+
: (Array.isArray(fallbackNS) ? fallbackNS : [fallbackNS]).filter((ns) => typeof ns === 'string' && ns.length > 0);
|
|
139
167
|
const keysByNs = new Map();
|
|
140
168
|
for (const key of allExtractedKeys.values()) {
|
|
141
169
|
const ns = key.ns || defaultNS || 'translation';
|
|
@@ -278,15 +306,17 @@ async function generateStatusReport(config) {
|
|
|
278
306
|
// when mergedTranslations[ns] is missing.
|
|
279
307
|
? (mergedTranslations?.[ns] ?? mergedTranslations ?? {})
|
|
280
308
|
: await loadTranslationFile(resolve(process.cwd(), getOutputPath(config.extract.output, locale, ns))) || {};
|
|
281
|
-
// Load fallbackNS translations if configured
|
|
282
|
-
|
|
283
|
-
|
|
309
|
+
// Load fallbackNS translations if configured (looked up in order, like the i18next runtime)
|
|
310
|
+
const fallbackTranslationsList = [];
|
|
311
|
+
for (const fallbackNs of fallbackNamespaces) {
|
|
312
|
+
if (ns === fallbackNs)
|
|
313
|
+
continue;
|
|
284
314
|
if (mergeNamespaces) {
|
|
285
|
-
// In merged mode, fallbackNS keys are in mergedTranslations under
|
|
286
|
-
|
|
315
|
+
// In merged mode, fallbackNS keys are in mergedTranslations under the fallback namespace
|
|
316
|
+
fallbackTranslationsList.push(mergedTranslations?.[fallbackNs] ?? mergedTranslations ?? {});
|
|
287
317
|
}
|
|
288
318
|
else {
|
|
289
|
-
|
|
319
|
+
fallbackTranslationsList.push(await loadTranslationFile(resolve(process.cwd(), getOutputPath(config.extract.output, locale, fallbackNs))) || {});
|
|
290
320
|
}
|
|
291
321
|
}
|
|
292
322
|
let translatedInNs = 0;
|
|
@@ -323,9 +353,14 @@ async function generateStatusReport(config) {
|
|
|
323
353
|
// Only fall back when the key is genuinely absent from the primary file.
|
|
324
354
|
// An empty string is intentional (placeholder from extract) — don't hide it.
|
|
325
355
|
let state = primaryState;
|
|
326
|
-
if (primaryState === 'absent'
|
|
327
|
-
const
|
|
328
|
-
|
|
356
|
+
if (primaryState === 'absent') {
|
|
357
|
+
for (const fallbackTranslations of fallbackTranslationsList) {
|
|
358
|
+
const fallbackState = classifyValue(getNestedValue(fallbackTranslations, key, sep));
|
|
359
|
+
if (fallbackState !== 'absent') {
|
|
360
|
+
state = fallbackState;
|
|
361
|
+
break;
|
|
362
|
+
}
|
|
363
|
+
}
|
|
329
364
|
}
|
|
330
365
|
// For the primary language the file itself is the source of values, so an
|
|
331
366
|
// empty placeholder still means the key is present. Only a truly absent
|
|
@@ -184,7 +184,11 @@ ${mergeResourcesAsInterface(resources, { optimize: !!enableSelector, indentation
|
|
|
184
184
|
const importPath = relative(dirname(outputPath), resourcesOutputPath)
|
|
185
185
|
.replace(/\\/g, '/').replace(/\.d\.ts$/, ''); // Make it a valid module path
|
|
186
186
|
const defaultNS = config.extract.defaultNS === false ? 'false' : `'${config.extract.defaultNS || 'translation'}'`;
|
|
187
|
-
const fallbackNS = config.extract.fallbackNS === false
|
|
187
|
+
const fallbackNS = config.extract.fallbackNS === false
|
|
188
|
+
? 'false'
|
|
189
|
+
: Array.isArray(config.extract.fallbackNS)
|
|
190
|
+
? `[${config.extract.fallbackNS.map(ns => `'${ns}'`).join(', ')}]`
|
|
191
|
+
: `'${config.extract.fallbackNS}'`;
|
|
188
192
|
const fileContent = `// This file is automatically generated by i18next-cli, because it was not existing. You can edit it based on your needs: https://www.i18next.com/overview/typescript#custom-type-options
|
|
189
193
|
import type Resources from './${importPath}';
|
|
190
194
|
|
package/package.json
CHANGED
|
@@ -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;
|
|
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;AAkrC9F;;;;;;;;;;;;;;;;;;;;;;;;;;;;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,oBAA4B,EAC5B,MAA4B,EAC7B,GAAE;IACD,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAA;CACX,GACL,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAyK9B"}
|
package/types/status.d.ts.map
CHANGED
|
@@ -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;AAOpE;;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;AAyHD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,SAAS,CAAE,MAAM,EAAE,oBAAoB,EAAE,OAAO,GAAE,aAAkB,
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,oBAAoB,EAAgB,MAAM,YAAY,CAAA;AAOpE;;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;AAyHD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,SAAS,CAAE,MAAM,EAAE,oBAAoB,EAAE,OAAO,GAAE,aAAkB,iBAoDzF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types-generator.d.ts","sourceRoot":"","sources":["../src/types-generator.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AA6E9D;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,oBAAoB,EAC5B,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAO,GACtE,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"types-generator.d.ts","sourceRoot":"","sources":["../src/types-generator.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AA6E9D;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,oBAAoB,EAC5B,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAO,GACtE,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CA2IvD"}
|
package/types/types.d.ts
CHANGED
|
@@ -36,8 +36,13 @@ export interface I18nextToolkitConfig {
|
|
|
36
36
|
* Set to false will not generate any namespace, useful if i.e. the output is a single language json with 1 namespace (and no nesting).
|
|
37
37
|
*/
|
|
38
38
|
defaultNS?: string | false;
|
|
39
|
-
/**
|
|
40
|
-
|
|
39
|
+
/**
|
|
40
|
+
* Namespace(s) to use as fallback when a key is missing in the current namespace for a locale
|
|
41
|
+
* (like the i18next runtime option, a string or an array of namespaces looked up in order).
|
|
42
|
+
* When set, `extract` will not add a key to another namespace's file if it is already
|
|
43
|
+
* translated in a fallback namespace, and `status` counts such keys as translated.
|
|
44
|
+
*/
|
|
45
|
+
fallbackNS?: string | string[] | false;
|
|
41
46
|
/** Separator for nested keys, or false for flat keys (default: '.') */
|
|
42
47
|
keySeparator?: string | false | null;
|
|
43
48
|
/** Separator between namespace and key, or false to disable (default: ':') */
|
package/types/types.d.ts.map
CHANGED
|
@@ -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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"}
|