{"record":{"id":"db7fb99fc3c6169d","repo":"angular/angular-cli","slug":"error-db7fb9","errorCode":null,"errorMessage":"*","messagePattern":"\\*","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"packages/angular_devkit/build_angular/src/builders/extract-i18n/application-extraction.ts","lineNumber":149,"sourceCode":"\n      return fileMap.has(requestedPath);\n    },\n    dirname(path: string): string {\n      return nodePath.dirname(path);\n    },\n  };\n\n  const logger = {\n    // level 2 is warnings\n    level: 2,\n    debug(...args: string[]): void {\n      // eslint-disable-next-line no-console\n      console.debug(...args);\n    },\n    info(...args: string[]): void {\n      context.logger.info(args.join(''));\n    },\n    warn(...args: string[]): void {\n      context.logger.warn(args.join(''));\n    },\n    error(...args: string[]): void {\n      context.logger.error(args.join(''));\n    },\n  };\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const extractor = new extractorConstructor(filesystem as any, logger, {\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    basePath: context.workspaceRoot as any,\n    useSourceMaps: true,\n  });\n\n  return extractor;\n}\n\nasync function first<T>(iterable: AsyncIterable<T>): Promise<T | undefined> {","sourceCodeStart":131,"sourceCodeEnd":167,"githubUrl":"https://github.com/angular/angular-cli/blob/bb72145f9ab45aee29f523236b3a25cd0813a841/packages/angular_devkit/build_angular/src/builders/extract-i18n/application-extraction.ts#L131-L167","documentation":"This `warn` is the logger adapter bridging the esbuild-based `@angular/build` extract-i18n pipeline to the Angular CLI logger; `\"*\"` means any message from the extraction process is forwarded verbatim via `context.logger.warn`. Warnings originate inside the application extraction (e.g. i18n parsing of the application build).","triggerScenarios":"Running `ng extract-i18n` with the esbuild-based application builder while the extraction encounters problems — unparsable templates, i18n metadata issues, or locale serialization notices — each forwarded through this adapter.","commonSituations":"New i18n attribute syntax or `$localize` usage the extractor flags; duplicate translation ids from refactored templates; extracting from a project whose source has i18n markers in unusual positions.","solutions":["Read the specific warning text emitted during extraction and fix the flagged template/source location","Re-run `ng extract-i18n` after fixing to confirm the warning is gone","Use `--verbose` to get more context about where extraction warnings originate","Check for duplicate custom i18n ids with `ng extract-i18n` output and deduplicate them"],"exampleFix":"// before\ntemplate: '<span i18n>Hello</span><span i18n=\"@@same-id\">Other</span>' // duplicate id\n// after\n'@@unique-id-1' and '@@unique-id-2' // or remove explicit ids","handlingStrategy":"validation","validationCode":"// pre-check source for duplicate explicit i18n ids before extraction\nconst ids = new Set<string>();\nfor (const m of template.matchAll(/i18n=\"@@([^\"]+)\"/g)) {\n  if (ids.has(m[1])) console.warn('Duplicate i18n id:', m[1]);\n  ids.add(m[1]);\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Run ng extract-i18n locally before pushing template changes","Use unique explicit @@ids for stable translations","Run the application builder build first so extraction sees valid input","Review extractor warnings immediately; they usually pinpoint the file/template"],"tags":["i18n","extract-i18n","esbuild","logger","localization"],"backgroundTag":"i18n-extraction-warning","analyzedSha":"bb72145f9ab45aee29f523236b3a25cd0813a841","analyzedAt":"2026-08-30T02:47:34.745Z","schemaVersion":2},"datasetVersion":"2026-08-30T03:17:51.788Z"}