From 6e2abcd5fc51a35ca51571026b67c0d12d677ec6 Mon Sep 17 00:00:00 2001 From: Olivier Combe Date: Thu, 13 Apr 2017 09:17:37 +0200 Subject: [PATCH] feat(compiler-cli): add param to set MissingTranslationStrategy on ngc (#15987) This commit adds a new parameter to ngc named `missingTranslation` to set the MissingTranslationStrategy for AoT, it takes the value `error`, `warning` or `ignore`. Fixes #15808 PR Close #15987 --- packages/compiler-cli/src/codegen.ts | 31 ++++++++++++++----- packages/compiler-cli/src/ngtools_api.ts | 2 ++ packages/compiler/src/aot/compiler_factory.ts | 4 +-- packages/compiler/src/aot/compiler_options.ts | 3 ++ tools/@angular/tsc-wrapped/src/cli_options.ts | 12 +++++-- 5 files changed, 40 insertions(+), 12 deletions(-) diff --git a/packages/compiler-cli/src/codegen.ts b/packages/compiler-cli/src/codegen.ts index db1b2fcaee..569ee37bd3 100644 --- a/packages/compiler-cli/src/codegen.ts +++ b/packages/compiler-cli/src/codegen.ts @@ -11,9 +11,9 @@ * Intended to be used in a build step. */ import * as compiler from '@angular/compiler'; +import {MissingTranslationStrategy} from '@angular/core'; import {AngularCompilerOptions, NgcCliOptions} from '@angular/tsc-wrapped'; import {readFileSync} from 'fs'; -import * as path from 'path'; import * as ts from 'typescript'; import {CompilerHost, CompilerHostContext, ModuleResolutionHostAdapter} from './compiler_host'; @@ -61,20 +61,35 @@ export class CodeGenerator { ngCompilerHost = usePathMapping ? new PathMappedCompilerHost(program, options, context) : new CompilerHost(program, options, context); } - const transFile = cliOptions.i18nFile; - const locale = cliOptions.locale; let transContent: string = ''; - if (transFile) { - if (!locale) { + if (cliOptions.i18nFile) { + if (!cliOptions.locale) { throw new Error( - `The translation file (${transFile}) locale must be provided. Use the --locale option.`); + `The translation file (${cliOptions.i18nFile}) locale must be provided. Use the --locale option.`); + } + transContent = readFileSync(cliOptions.i18nFile, 'utf8'); + } + let missingTranslation = MissingTranslationStrategy.Warning; + if (cliOptions.missingTranslation) { + switch (cliOptions.missingTranslation) { + case 'error': + missingTranslation = MissingTranslationStrategy.Error; + break; + case 'warning': + missingTranslation = MissingTranslationStrategy.Warning; + break; + case 'ignore': + missingTranslation = MissingTranslationStrategy.Ignore; + break; + default: + throw new Error( + `Unknown option for missingTranslation (${cliOptions.missingTranslation}). Use either error, warning or ignore.`); } - transContent = readFileSync(transFile, 'utf8'); } const {compiler: aotCompiler} = compiler.createAotCompiler(ngCompilerHost, { translations: transContent, i18nFormat: cliOptions.i18nFormat, - locale: cliOptions.locale, + locale: cliOptions.locale, missingTranslation, enableLegacyTemplate: options.enableLegacyTemplate !== false, genFilePreamble: PREAMBLE, }); diff --git a/packages/compiler-cli/src/ngtools_api.ts b/packages/compiler-cli/src/ngtools_api.ts index 9f34dcb8d2..457278e8b4 100644 --- a/packages/compiler-cli/src/ngtools_api.ts +++ b/packages/compiler-cli/src/ngtools_api.ts @@ -35,6 +35,7 @@ export interface NgTools_InternalApi_NG2_CodeGen_Options { i18nFormat?: string; i18nFile?: string; locale?: string; + missingTranslation?: string; readResource: (fileName: string) => Promise; @@ -95,6 +96,7 @@ export class NgTools_InternalApi_NG_2 { i18nFormat: options.i18nFormat !, i18nFile: options.i18nFile !, locale: options.locale !, + missingTranslation: options.missingTranslation !, basePath: options.basePath }; diff --git a/packages/compiler/src/aot/compiler_factory.ts b/packages/compiler/src/aot/compiler_factory.ts index 7e21069a52..397aae195c 100644 --- a/packages/compiler/src/aot/compiler_factory.ts +++ b/packages/compiler/src/aot/compiler_factory.ts @@ -51,12 +51,12 @@ export function createAotCompiler(compilerHost: AotCompilerHost, options: AotCom StaticAndDynamicReflectionCapabilities.install(staticReflector); const console = new Console(); const htmlParser = new I18NHtmlParser( - new HtmlParser(), translations, options.i18nFormat, MissingTranslationStrategy.Warning, - console); + new HtmlParser(), translations, options.i18nFormat, options.missingTranslation, console); const config = new CompilerConfig({ defaultEncapsulation: ViewEncapsulation.Emulated, useJit: false, enableLegacyTemplate: options.enableLegacyTemplate !== false, + missingTranslation: options.missingTranslation, }); const normalizer = new DirectiveNormalizer( {get: (url: string) => compilerHost.loadResource(url)}, urlResolver, htmlParser, config); diff --git a/packages/compiler/src/aot/compiler_options.ts b/packages/compiler/src/aot/compiler_options.ts index d5c369dc3c..8dd59f6d3f 100644 --- a/packages/compiler/src/aot/compiler_options.ts +++ b/packages/compiler/src/aot/compiler_options.ts @@ -6,10 +6,13 @@ * found in the LICENSE file at https://angular.io/license */ +import {MissingTranslationStrategy} from '@angular/core'; + export interface AotCompilerOptions { locale?: string; i18nFormat?: string; translations?: string; + missingTranslation?: MissingTranslationStrategy; enableLegacyTemplate?: boolean; /** preamble for all generated source files */ genFilePreamble?: string; diff --git a/tools/@angular/tsc-wrapped/src/cli_options.ts b/tools/@angular/tsc-wrapped/src/cli_options.ts index c379ee5c94..566cf9cee1 100644 --- a/tools/@angular/tsc-wrapped/src/cli_options.ts +++ b/tools/@angular/tsc-wrapped/src/cli_options.ts @@ -31,12 +31,20 @@ export class NgcCliOptions extends CliOptions { public i18nFormat: string; public i18nFile: string; public locale: string; + public missingTranslation: string; - constructor({i18nFormat = null, i18nFile = null, locale = null, basePath = null}: - {i18nFormat?: string, i18nFile?: string, locale?: string, basePath?: string}) { + constructor({i18nFormat = null, i18nFile = null, locale = null, missingTranslation = null, + basePath = null}: { + i18nFormat?: string, + i18nFile?: string, + locale?: string, + missingTranslation?: string, + basePath?: string + }) { super({basePath: basePath}); this.i18nFormat = i18nFormat; this.i18nFile = i18nFile; this.locale = locale; + this.missingTranslation = missingTranslation; } }