/** * @license * Copyright Google LLC All Rights Reserved. * * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.io/license */ import {Xliff2} from '@angular/compiler/src/i18n/serializers/xliff2'; import {waitForAsync} from '@angular/core/testing'; import {expect} from '@angular/platform-browser/testing/src/matchers'; import {configureCompiler, createComponent, HTML, serializeTranslations, validateHtml} from './integration_common'; describe('i18n XLIFF integration spec', () => { describe('(with LF line endings)', () => { beforeEach(waitForAsync( () => configureCompiler(XLIFF2_TOMERGE + LF_LINE_ENDING_XLIFF2_TOMERGE, 'xlf2'))); it('should extract from templates', () => { const serializer = new Xliff2(); const serializedXliff2 = serializeTranslations(HTML, serializer); XLIFF2_EXTRACTED.forEach(x => { expect(serializedXliff2).toContain(x); }); expect(serializedXliff2).toContain(LF_LINE_ENDING_XLIFF2_EXTRACTED); }); it('should translate templates', () => { const {tb, cmp, el} = createComponent(HTML); validateHtml(tb, cmp, el); }); }); describe('(with CRLF line endings', () => { beforeEach(waitForAsync( () => configureCompiler(XLIFF2_TOMERGE + CRLF_LINE_ENDING_XLIFF2_TOMERGE, 'xlf2'))); it('should extract from templates (with CRLF line endings)', () => { const serializer = new Xliff2(); const serializedXliff = serializeTranslations(HTML.replace(/\n/g, '\r\n'), serializer); XLIFF2_EXTRACTED.forEach(x => { expect(serializedXliff).toContain(x); }); expect(serializedXliff).toContain(CRLF_LINE_ENDING_XLIFF2_EXTRACTED); }); it('should translate templates (with CRLF line endings)', () => { const {tb, cmp, el} = createComponent(HTML.replace(/\n/g, '\r\n')); validateHtml(tb, cmp, el); }); }); }); const XLIFF2_TOMERGE = ` i18n attribute on tags attributs i18n sur les balises nested imbriqué nested imbriqué with placeholders avec des espaces réservés file.ts:11 with nested placeholders avec espaces réservés imbriqués on not translatable node sur des balises non traductibles <b>bold</b> <b>gras</b> on translatable node sur des balises traductibles {VAR_PLURAL, plural, =0 {zero} =1 {one} =2 {two} other {many} } {VAR_PLURAL, plural, =0 {zero} =1 {un} =2 {deux} other {beaucoup} } file.ts:23 {VAR_SELECT, select, other {other} male {m} female {female} } {VAR_SELECT, select, other {autre} male {homme} female {femme} } file.ts:25,27 {VAR_SELECT, select, male {m} female {f} } {VAR_SELECT, select, male {homme} female {femme} } sex = sexe = in a translatable section dans une section traductible Markers in html comments Balises dans les commentaires html it should work ca devrait marcher with an explicit ID avec un ID explicite {VAR_PLURAL, plural, =0 {zero} =1 {one} =2 {two} other {many} } {VAR_PLURAL, plural, =0 {zero} =1 {un} =2 {deux} other {beaucoup} } foobar FOOBAR `; const LF_LINE_ENDING_XLIFF2_TOMERGE = ` {VAR_PLURAL, plural, =0 {Found no results} =1 {Found one result} other {Found results} } {VAR_PLURAL, plural, =0 {Pas de réponse} =1 {Une réponse} other { réponses} } `; const CRLF_LINE_ENDING_XLIFF2_TOMERGE = ` {VAR_PLURAL, plural, =0 {Found no results} =1 {Found one result} other {Found results} } {VAR_PLURAL, plural, =0 {Pas de réponse} =1 {Une réponse} other { réponses} } `; const XLIFF2_EXTRACTED = [ ` file.ts:3 i18n attribute on tags `, ` file.ts:5 nested `, ` different meaning file.ts:7 nested `, ` file.ts:9 file.ts:10 with placeholders `, ` file.ts:11 with nested placeholders `, ` file.ts:14 on not translatable node `, ` file.ts:14 <b>bold</b> `, ` file.ts:15 on translatable node `, ` file.ts:20 file.ts:37 {VAR_PLURAL, plural, =0 {zero} =1 {one} =2 {two} other {many} } `, ` file.ts:22,24 `, ` file.ts:23 {VAR_SELECT, select, male {m} female {f} other {other} } `, ` file.ts:25,27 `, ` file.ts:26 {VAR_SELECT, select, male {m} female {f} } `, ` file.ts:29 `, ` file.ts:30 sex = `, ` file.ts:31 `, ` file.ts:36 file.ts:54 in a translatable section `, ` file.ts:34,38 Markers in html comments `, ` file.ts:40 it should work `, ` file.ts:42 with an explicit ID `, ` file.ts:43 {VAR_PLURAL, plural, =0 {zero} =1 {one} =2 {two} other {many} } `, ` file.ts:54 foobar `, ` file.ts:56 ` ]; const LF_LINE_ENDING_XLIFF2_EXTRACTED = ` desc file.ts:46,52 {VAR_PLURAL, plural, =0 {Found no results} =1 {Found one result} other {Found results} } `; const CRLF_LINE_ENDING_XLIFF2_EXTRACTED = ` desc file.ts:46,52 {VAR_PLURAL, plural, =0 {Found no results} =1 {Found one result} other {Found results} } `;