diff --git a/packages/compiler-cli/test/extract_i18n_spec.ts b/packages/compiler-cli/test/extract_i18n_spec.ts index 4373fef338..8e44da3e22 100644 --- a/packages/compiler-cli/test/extract_i18n_spec.ts +++ b/packages/compiler-cli/test/extract_i18n_spec.ts @@ -43,8 +43,9 @@ const EXPECTED_XMB = ` ]> - src/module.ts:1translate me - src/module.ts:2Welcome + src/basic.html:1src/comp2.ts:1src/basic.html:1translate me + src/basic.html:3,4src/comp2.ts:3,4src/comp2.ts:2,3src/basic.html:3,4 + Welcome `; @@ -55,18 +56,39 @@ const EXPECTED_XLIFF = ` translate me - src/module.ts + src/basic.html + 1 + + + src/comp2.ts + 1 + + + src/basic.html 1 desc meaning - - Welcome + + + Welcome - src/module.ts + src/basic.html + 3 + + + src/comp2.ts + 3 + + + src/comp2.ts 2 + + src/basic.html + 3 + @@ -80,18 +102,24 @@ const EXPECTED_XLIFF2 = ` desc meaning - src/module.ts:1 + src/basic.html:1 + src/comp2.ts:1 + src/basic.html:1 translate me - + - src/module.ts:2 + src/basic.html:3,4 + src/comp2.ts:3,4 + src/comp2.ts:2,3 + src/basic.html:3,4 - Welcome + + Welcome @@ -155,21 +183,54 @@ describe('extract_i18n command line', () => { }); function writeSources() { - write('src/basic.html', [ - `
`, - `

Welcome

`, - ].join('\n')); - write('src/module.ts', ` - import {Component, NgModule} from '@angular/core'; + const welcomeMessage = ` + + Welcome + `; + write('src/basic.html', `
+

${welcomeMessage}

`); + + write('src/comp1.ts', ` + import {Component} from '@angular/core'; @Component({ selector: 'basic', templateUrl: './basic.html', }) - export class BasicCmp {} + export class BasicCmp1 {}`); + + write('src/comp2.ts', ` + import {Component} from '@angular/core'; + + @Component({ + selector: 'basic2', + template: \`
+

${welcomeMessage}

\`, + }) + export class BasicCmp2 {} + @Component({ + selector: 'basic4', + template: \`

${welcomeMessage}

\`, + }) + export class BasicCmp4 {}`); + + write('src/comp3.ts', ` + import {Component} from '@angular/core'; + + @Component({ + selector: 'basic3', + templateUrl: './basic.html', + }) + export class BasicCmp3 {}`); + + write('src/module.ts', ` + import {NgModule} from '@angular/core'; + import {BasicCmp1} from './comp1'; + import {BasicCmp2, BasicCmp4} from './comp2'; + import {BasicCmp3} from './comp3'; @NgModule({ - declarations: [BasicCmp] + declarations: [BasicCmp1, BasicCmp2, BasicCmp3, BasicCmp4] }) export class I18nModule {} `); diff --git a/packages/compiler/src/aot/compiler.ts b/packages/compiler/src/aot/compiler.ts index 660c1eeb26..f76e0fe06c 100644 --- a/packages/compiler/src/aot/compiler.ts +++ b/packages/compiler/src/aot/compiler.ts @@ -318,10 +318,12 @@ export class AotCompiler { }); compMetas.forEach(compMeta => { const html = compMeta.template !.template !; + // Template URL points to either an HTML or TS file depending on whether + // the file is used with `templateUrl:` or `template:`, respectively. + const templateUrl = compMeta.template !.templateUrl !; const interpolationConfig = InterpolationConfig.fromArray(compMeta.template !.interpolation); - errors.push( - ...messageBundle.updateFromTemplate(html, file.fileName, interpolationConfig) !); + errors.push(...messageBundle.updateFromTemplate(html, templateUrl, interpolationConfig) !); }); }); diff --git a/packages/compiler/src/i18n/extractor.ts b/packages/compiler/src/i18n/extractor.ts index 80015d3fa0..8b950feb6d 100644 --- a/packages/compiler/src/i18n/extractor.ts +++ b/packages/compiler/src/i18n/extractor.ts @@ -75,10 +75,14 @@ export class Extractor { }); compMetas.forEach(compMeta => { const html = compMeta.template !.template !; + // Template URL points to either an HTML or TS file depending on + // whether the file is used with `templateUrl:` or `template:`, + // respectively. + const templateUrl = compMeta.template !.templateUrl !; const interpolationConfig = InterpolationConfig.fromArray(compMeta.template !.interpolation); errors.push(...this.messageBundle.updateFromTemplate( - html, file.fileName, interpolationConfig) !); + html, templateUrl, interpolationConfig) !); }); });