/** * @license * Copyright Google Inc. 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 {NgLocalization} from '@angular/common'; import {Component, DebugElement} from '@angular/core'; import {ComponentFixture} from '@angular/core/testing'; import {By} from '@angular/platform-browser/src/dom/debug/by'; import {stringifyElement} from '@angular/platform-browser/testing/src/browser_util'; import {expect} from '@angular/platform-browser/testing/src/matchers'; @Component({ selector: 'i18n-cmp', template: '', }) export class I18nComponent { // TODO(issue/24571): remove '!'. count !: number; // TODO(issue/24571): remove '!'. sex !: string; // TODO(issue/24571): remove '!'. sexB !: string; response: any = {getItemsList: (): any[] => []}; } export class FrLocalization extends NgLocalization { public static PROVIDE = {provide: NgLocalization, useClass: FrLocalization, deps: []}; getPluralCategory(value: number): string { switch (value) { case 0: case 1: return 'one'; default: return 'other'; } } } export function validateHtml( tb: ComponentFixture, cmp: I18nComponent, el: DebugElement) { expectHtml(el, 'h1').toBe('

attributs i18n sur les balises

'); expectHtml(el, '#i18n-1').toBe('

imbriqué

'); expectHtml(el, '#i18n-2').toBe('

imbriqué

'); expectHtml(el, '#i18n-3').toBe('

avec des espaces réservés

'); expectHtml(el, '#i18n-3b') .toBe( '

avec des espaces réservés

'); expectHtml(el, '#i18n-4') .toBe('

'); expectHtml(el, '#i18n-5').toBe('

'); expectHtml(el, '#i18n-6').toBe('

'); cmp.count = 0; tb.detectChanges(); expect(el.query(By.css('#i18n-7')).nativeElement).toHaveText('zero'); expect(el.query(By.css('#i18n-14')).nativeElement).toHaveText('zero'); cmp.count = 1; tb.detectChanges(); expect(el.query(By.css('#i18n-7')).nativeElement).toHaveText('un'); expect(el.query(By.css('#i18n-14')).nativeElement).toHaveText('un'); expect(el.query(By.css('#i18n-17')).nativeElement).toHaveText('un'); cmp.count = 2; tb.detectChanges(); expect(el.query(By.css('#i18n-7')).nativeElement).toHaveText('deux'); expect(el.query(By.css('#i18n-14')).nativeElement).toHaveText('deux'); expect(el.query(By.css('#i18n-17')).nativeElement).toHaveText('deux'); cmp.count = 3; tb.detectChanges(); expect(el.query(By.css('#i18n-7')).nativeElement).toHaveText('beaucoup'); expect(el.query(By.css('#i18n-14')).nativeElement).toHaveText('beaucoup'); expect(el.query(By.css('#i18n-17')).nativeElement).toHaveText('beaucoup'); cmp.sex = 'male'; cmp.sexB = 'female'; tb.detectChanges(); expect(el.query(By.css('#i18n-8')).nativeElement).toHaveText('homme'); expect(el.query(By.css('#i18n-8b')).nativeElement).toHaveText('femme'); cmp.sex = 'female'; tb.detectChanges(); expect(el.query(By.css('#i18n-8')).nativeElement).toHaveText('femme'); cmp.sex = '0'; tb.detectChanges(); expect(el.query(By.css('#i18n-8')).nativeElement).toHaveText('autre'); cmp.count = 123; tb.detectChanges(); expectHtml(el, '#i18n-9').toEqual('
count = 123
'); cmp.sex = 'f'; tb.detectChanges(); expectHtml(el, '#i18n-10').toEqual('
sexe = f
'); expectHtml(el, '#i18n-11').toEqual('
custom name
'); expectHtml(el, '#i18n-12').toEqual('

Balises dans les commentaires html

'); expectHtml(el, '#i18n-13').toBe('
'); expectHtml(el, '#i18n-15').toMatch(/ca devrait<\/b> marcher/); expectHtml(el, '#i18n-16').toMatch(/avec un ID explicite/); expectHtml(el, '#i18n-18') .toEqual('
FOOBAR
'); } function expectHtml(el: DebugElement, cssSelector: string): any { return expect(stringifyElement(el.query(By.css(cssSelector)).nativeElement)); } export const HTML = `

i18n attribute on tags

nested

nested

with placeholders

with placeholders

with
nested
placeholders

{count, plural, =0 {zero} =1 {one} =2 {two} other {many}}
{sex, select, male {m} female {f} other {other}}
{sexB, select, male {m} female {f}}
{{ "count = " + count }}
sex = {{ sex }}
{{ "custom name" //i18n(ph="CUSTOM_NAME") }}

Markers in html comments

{count, plural, =0 {zero} =1 {one} =2 {two} other {many}}
it should work
with an explicit ID
{count, plural, =0 {zero} =1 {one} =2 {two} other {many}}
{ response.getItemsList().length, plural, =0 {Found no results} =1 {Found one result} other {Found {{response.getItemsList().length}} results} }
foobar
{{ 'test' //i18n(ph="map name") }}
`;