fix(compiler): remove i18n markup even if no translations (#17999)

Fixes #11042
This commit is contained in:
Victor Berchet
2017-07-07 16:16:49 -07:00
committed by Jason Aden
parent 2ba3ada27f
commit 9c3386b1b7
11 changed files with 149 additions and 31 deletions

View File

@ -29,8 +29,6 @@ import {ParseError} from '../parse_util';
import {PipeResolver} from '../pipe_resolver';
import {DomElementSchemaRegistry} from '../schema/dom_element_schema_registry';
import {createOfflineCompileUrlResolver} from '../url_resolver';
import {I18NHtmlParser} from './i18n_html_parser';
import {MessageBundle} from './message_bundle';
/**
@ -87,7 +85,7 @@ export class Extractor {
static create(host: ExtractorHost, locale: string|null):
{extractor: Extractor, staticReflector: StaticReflector} {
const htmlParser = new I18NHtmlParser(new HtmlParser());
const htmlParser = new HtmlParser();
const urlResolver = createOfflineCompileUrlResolver();
const symbolCache = new StaticSymbolCache();

View File

@ -7,9 +7,12 @@
*/
import {MissingTranslationStrategy, ɵConsole as Console} from '@angular/core';
import {HtmlParser} from '../ml_parser/html_parser';
import {DEFAULT_INTERPOLATION_CONFIG, InterpolationConfig} from '../ml_parser/interpolation_config';
import {ParseTreeResult} from '../ml_parser/parser';
import {digest} from './digest';
import {mergeTranslations} from './extractor_merger';
import {Serializer} from './serializers/serializer';
import {Xliff} from './serializers/xliff';
@ -32,6 +35,9 @@ export class I18NHtmlParser implements HtmlParser {
const serializer = createSerializer(translationsFormat);
this._translationBundle =
TranslationBundle.load(translations, 'i18n', serializer, missingTranslation, console);
} else {
this._translationBundle =
new TranslationBundle({}, null, digest, undefined, missingTranslation, console);
}
}
@ -41,11 +47,6 @@ export class I18NHtmlParser implements HtmlParser {
const parseResult =
this._htmlParser.parse(source, url, parseExpansionForms, interpolationConfig);
if (!this._translationBundle) {
// Do not enable i18n when no translation bundle is provided
return parseResult;
}
if (parseResult.errors.length) {
return new ParseTreeResult(parseResult.rootNodes, parseResult.errors);
}

View File

@ -59,10 +59,13 @@ export const COMPILER_PROVIDERS: Array<any|Type<any>|{[k: string]: any}|any[]> =
},
{
provide: i18n.I18NHtmlParser,
useFactory: (parser: HtmlParser, translations: string, format: string, config: CompilerConfig,
console: Console) =>
new i18n.I18NHtmlParser(
parser, translations, format, config.missingTranslation !, console),
useFactory: (parser: HtmlParser, translations: string | null, format: string,
config: CompilerConfig, console: Console) => {
translations = translations || '';
const missingTranslation =
translations ? config.missingTranslation ! : MissingTranslationStrategy.Ignore;
return new i18n.I18NHtmlParser(parser, translations, format, missingTranslation, console);
},
deps: [
baseHtmlParser,
[new Optional(), new Inject(TRANSLATIONS)],