/**
* @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
`;