/** * @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 {Xliff} from '@angular/compiler/src/i18n/serializers/xliff'; 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(XLIFF_TOMERGE + LF_LINE_ENDING_XLIFF_TOMERGE, 'xlf'))); it('should extract from templates', () => { const serializer = new Xliff(); const serializedXliff = serializeTranslations(HTML, serializer); XLIFF_EXTRACTED.forEach(x => { expect(serializedXliff).toContain(x); }); expect(serializedXliff).toContain(LF_LINE_ENDING_XLIFF_EXTRACTED); }); it('should translate templates', () => { const {tb, cmp, el} = createComponent(HTML); validateHtml(tb, cmp, el); }); }); describe('(with CRLF line endings', () => { beforeEach(waitForAsync( () => configureCompiler(XLIFF_TOMERGE + CRLF_LINE_ENDING_XLIFF_TOMERGE, 'xlf'))); it('should extract from templates (with CRLF line endings)', () => { const serializer = new Xliff(); const serializedXliff = serializeTranslations(HTML.replace(/\n/g, '\r\n'), serializer); XLIFF_EXTRACTED.forEach(x => { expect(serializedXliff).toContain(x); }); expect(serializedXliff).toContain(CRLF_LINE_ENDING_XLIFF_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 XLIFF_TOMERGE = ` i18n attribute on tags attributs i18n sur les balises nested imbriqué nested imbriqué different meaning with placeholders avec des espaces réservés with nested placeholders with nested placeholders file.ts 11 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} } {VAR_SELECT, select, other {other} male {m} female {f} } {VAR_SELECT, select, other {autre} male {homme} female {femme}} {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_XLIFF_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} } desc `; const CRLF_LINE_ENDING_XLIFF_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} } desc `; const XLIFF_EXTRACTED: string[] = [ ` i18n attribute on tags file.ts 3 `, ` nested file.ts 5 `, ` nested file.ts 7 different meaning `, ` with placeholders file.ts 9 file.ts 10 `, ` with nested placeholders file.ts 11 `, ` on not translatable node file.ts 14 `, ` <b>bold</b> file.ts 14 `, ` on translatable node file.ts 15 `, ` {VAR_PLURAL, plural, =0 {zero} =1 {one} =2 {two} other {many} } file.ts 20 file.ts 37 `, ` file.ts 22 `, ` {VAR_SELECT, select, male {m} female {f} other {other} } file.ts 23 `, ` file.ts 25 `, ` {VAR_SELECT, select, male {m} female {f} } file.ts 26 `, ` file.ts 29 `, ` sex = file.ts 30 `, ` file.ts 31 `, ` in a translatable section file.ts 36 file.ts 54 `, ` Markers in html comments file.ts 34 `, ` it should work file.ts 40 `, ` with an explicit ID file.ts 42 `, ` {VAR_PLURAL, plural, =0 {zero} =1 {one} =2 {two} other {many} } file.ts 43 `, ` foobar file.ts 54 `, ` file.ts 56 ` ]; const LF_LINE_ENDING_XLIFF_EXTRACTED = ` {VAR_PLURAL, plural, =0 {Found no results} =1 {Found one result} other {Found results} } file.ts 46 desc `; const CRLF_LINE_ENDING_XLIFF_EXTRACTED = ` {VAR_PLURAL, plural, =0 {Found no results} =1 {Found one result} other {Found results} } file.ts 46 desc `;