diff --git a/integration/cli-hello-world-ivy-i18n/src/tsconfig.legacy.json b/integration/cli-hello-world-ivy-i18n/src/tsconfig.legacy.json index 2c34ebff0d..3bf6947e21 100644 --- a/integration/cli-hello-world-ivy-i18n/src/tsconfig.legacy.json +++ b/integration/cli-hello-world-ivy-i18n/src/tsconfig.legacy.json @@ -2,6 +2,6 @@ "extends": "./tsconfig.app.json", "angularCompilerOptions": { "enableIvy": true, - "i18nLegacyMessageIdFormat": "xlf" + "i18nInFormat": "xlf" } } diff --git a/packages/compiler-cli/src/main.ts b/packages/compiler-cli/src/main.ts index 047b620738..aad3add832 100644 --- a/packages/compiler-cli/src/main.ts +++ b/packages/compiler-cli/src/main.ts @@ -32,7 +32,6 @@ export function main( if (configErrors.length) { return reportErrorsAndExit(configErrors, /*options*/ undefined, consoleError); } - warnForDeprecatedOptions(options); if (watch) { const result = watchMode(project, options, consoleError); return reportErrorsAndExit(result.firstCompileResult, options, consoleError); @@ -227,14 +226,6 @@ export function watchMode( }, options, options => createEmitCallback(options))); } -function warnForDeprecatedOptions(options: api.CompilerOptions) { - if (options.i18nLegacyMessageIdFormat !== undefined) { - console.warn( - 'The `i18nLegacyMessageIdFormat` option is deprecated.\n' + - 'Migrate your legacy translation files to the new `$localize` message id format and remove this option.'); - } -} - // CLI entry point if (require.main === module) { const args = process.argv.slice(2); diff --git a/packages/compiler-cli/src/ngtsc/program.ts b/packages/compiler-cli/src/ngtsc/program.ts index 19126f8b05..672a7a1fdc 100644 --- a/packages/compiler-cli/src/ngtsc/program.ts +++ b/packages/compiler-cli/src/ngtsc/program.ts @@ -509,7 +509,7 @@ export class NgtscProgram implements api.Program { this.reflector, evaluator, metaRegistry, this.metaReader !, scopeReader, scopeRegistry, this.isCore, this.resourceManager, this.rootDirs, this.options.preserveWhitespaces || false, this.options.i18nUseExternalIds !== false, - this.options.i18nLegacyMessageIdFormat || '', this.moduleResolver, this.cycleAnalyzer, + this.getI18nLegacyMessageFormat(), this.moduleResolver, this.cycleAnalyzer, this.refEmitter, this.defaultImportTracker, this.incrementalState), new DirectiveDecoratorHandler( this.reflector, evaluator, metaRegistry, this.defaultImportTracker, this.isCore), @@ -529,6 +529,11 @@ export class NgtscProgram implements api.Program { this.sourceToFactorySymbols, scopeRegistry); } + private getI18nLegacyMessageFormat(): string { + return this.options.enableI18nLegacyMessageIdFormat !== false && this.options.i18nInFormat || + ''; + } + private get reflector(): TypeScriptReflectionHost { if (this._reflector === undefined) { this._reflector = new TypeScriptReflectionHost(this.tsProgram.getTypeChecker()); diff --git a/packages/compiler-cli/src/transformers/api.ts b/packages/compiler-cli/src/transformers/api.ts index 4d30349b7c..45cc6ae770 100644 --- a/packages/compiler-cli/src/transformers/api.ts +++ b/packages/compiler-cli/src/transformers/api.ts @@ -162,17 +162,16 @@ export interface CompilerOptions extends ts.CompilerOptions { i18nUseExternalIds?: boolean; /** - * Render `$localize` message ids with the specified legacy format (xlf, xlf2 or xmb). + * Render `$localize` message ids with the legacy format (xlf, xlf2 or xmb) specified in + * `i18nInFormat`. + * + * This is only active if we are building with `enableIvy: true` and a valid + * `i18nInFormat` has been provided. The default value for now is `true`. * * Use this option when use are using the `$localize` based localization messages but * have not migrated the translation files to use the new `$localize` message id format. - * - * @deprecated - * `i18nLegacyMessageIdFormat` should only be used while migrating from legacy message id - * formatted translation files and will be removed at the same time as ViewEngine support is - * removed. */ - i18nLegacyMessageIdFormat?: string; + enableI18nLegacyMessageIdFormat?: boolean; // Whether to remove blank text nodes from compiled templates. It is `false` by default starting // from Angular 6. diff --git a/packages/compiler-cli/test/ngtsc/ngtsc_spec.ts b/packages/compiler-cli/test/ngtsc/ngtsc_spec.ts index b4b720ed14..a91c8abf49 100644 --- a/packages/compiler-cli/test/ngtsc/ngtsc_spec.ts +++ b/packages/compiler-cli/test/ngtsc/ngtsc_spec.ts @@ -2052,60 +2052,79 @@ runInEachFileSystem(os => { expect(jsContents).not.toContain('MSG_EXTERNAL_'); }); - it('should render legacy id when i18nLegacyMessageIdFormat config is set to xlf', () => { - env.tsconfig({i18nLegacyMessageIdFormat: 'xlf'}); - env.write(`test.ts`, ` + it('should render legacy id when `enableI18nLegacyMessageIdFormat` is not false and `i18nInFormat` is set to "xlf"', + () => { + env.tsconfig({i18nInFormat: 'xlf'}); + env.write(`test.ts`, ` import {Component} from '@angular/core'; @Component({ selector: 'test', template: '