2017-03-13 06:40:44 -04:00
|
|
|
/**
|
|
|
|
* @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 {ResourceLoader} from '@angular/compiler';
|
|
|
|
import {MessageBundle} from '@angular/compiler/src/i18n/message_bundle';
|
|
|
|
import {Xliff} from '@angular/compiler/src/i18n/serializers/xliff';
|
|
|
|
import {HtmlParser} from '@angular/compiler/src/ml_parser/html_parser';
|
|
|
|
import {DEFAULT_INTERPOLATION_CONFIG} from '@angular/compiler/src/ml_parser/interpolation_config';
|
|
|
|
import {DebugElement, TRANSLATIONS, TRANSLATIONS_FORMAT} from '@angular/core';
|
|
|
|
import {ComponentFixture, TestBed, async} from '@angular/core/testing';
|
|
|
|
import {expect} from '@angular/platform-browser/testing/src/matchers';
|
|
|
|
|
|
|
|
import {SpyResourceLoader} from '../spies';
|
|
|
|
|
|
|
|
import {FrLocalization, HTML, I18nComponent, validateHtml} from './integration_common';
|
|
|
|
|
2017-12-16 17:42:55 -05:00
|
|
|
{
|
2017-03-13 06:40:44 -04:00
|
|
|
describe('i18n XLIFF integration spec', () => {
|
|
|
|
|
|
|
|
beforeEach(async(() => {
|
|
|
|
TestBed.configureCompiler({
|
|
|
|
providers: [
|
perf: switch angular to use StaticInjector instead of ReflectiveInjector
This change allows ReflectiveInjector to be tree shaken resulting
in not needed Reflect polyfil and smaller bundles.
Code savings for HelloWorld using Closure:
Reflective: bundle.js: 105,864(34,190 gzip)
Static: bundle.js: 154,889(33,555 gzip)
645( 2%)
BREAKING CHANGE:
`platformXXXX()` no longer accepts providers which depend on reflection.
Specifically the method signature when from `Provider[]` to
`StaticProvider[]`.
Example:
Before:
```
[
MyClass,
{provide: ClassA, useClass: SubClassA}
]
```
After:
```
[
{provide: MyClass, deps: [Dep1,...]},
{provide: ClassA, useClass: SubClassA, deps: [Dep1,...]}
]
```
NOTE: This only applies to platform creation and providers for the JIT
compiler. It does not apply to `@Compotent` or `@NgModule` provides
declarations.
Benchpress note: Previously Benchpress also supported reflective
provides, which now require static providers.
DEPRECATION:
- `ReflectiveInjector` is now deprecated as it will be remove. Use
`Injector.create` as a replacement.
closes #18496
2017-08-03 15:33:29 -04:00
|
|
|
SpyResourceLoader.PROVIDE,
|
|
|
|
FrLocalization.PROVIDE,
|
2017-03-13 06:40:44 -04:00
|
|
|
{provide: TRANSLATIONS, useValue: XLIFF_TOMERGE},
|
|
|
|
{provide: TRANSLATIONS_FORMAT, useValue: 'xliff'},
|
|
|
|
]
|
|
|
|
});
|
|
|
|
|
|
|
|
TestBed.configureTestingModule({declarations: [I18nComponent]});
|
|
|
|
}));
|
|
|
|
|
|
|
|
it('should extract from templates', () => {
|
|
|
|
const catalog = new MessageBundle(new HtmlParser, [], {});
|
|
|
|
const serializer = new Xliff();
|
2017-04-14 12:06:25 -04:00
|
|
|
catalog.updateFromTemplate(HTML, 'file.ts', DEFAULT_INTERPOLATION_CONFIG);
|
2017-03-13 06:40:44 -04:00
|
|
|
|
|
|
|
expect(catalog.write(serializer)).toContain(XLIFF_EXTRACTED);
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should translate templates', () => {
|
|
|
|
const tb: ComponentFixture<I18nComponent> =
|
|
|
|
TestBed.overrideTemplate(I18nComponent, HTML).createComponent(I18nComponent);
|
|
|
|
const cmp: I18nComponent = tb.componentInstance;
|
|
|
|
const el: DebugElement = tb.debugElement;
|
|
|
|
|
|
|
|
validateHtml(tb, cmp, el);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
const XLIFF_TOMERGE = `
|
|
|
|
<trans-unit id="3cb04208df1c2f62553ed48e75939cf7107f9dad" datatype="html">
|
|
|
|
<source>i18n attribute on tags</source>
|
|
|
|
<target>attributs i18n sur les balises</target>
|
|
|
|
</trans-unit>
|
|
|
|
<trans-unit id="52895b1221effb3f3585b689f049d2784d714952" datatype="html">
|
|
|
|
<source>nested</source>
|
|
|
|
<target>imbriqué</target>
|
|
|
|
</trans-unit>
|
|
|
|
<trans-unit id="88d5f22050a9df477ee5646153558b3a4862d47e" datatype="html">
|
|
|
|
<source>nested</source>
|
|
|
|
<target>imbriqué</target>
|
|
|
|
<note priority="1" from="meaning">different meaning</note>
|
|
|
|
</trans-unit>
|
|
|
|
<trans-unit id="34fec9cc62e28e8aa6ffb306fa8569ef0a8087fe" datatype="html">
|
2017-07-12 10:27:53 -04:00
|
|
|
<source><x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="<i>"/>with placeholders<x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="</i>"/></source>
|
2017-03-13 06:40:44 -04:00
|
|
|
<target><x id="START_ITALIC_TEXT" ctype="x-i"/>avec des espaces réservés<x id="CLOSE_ITALIC_TEXT" ctype="x-i"/></target>
|
|
|
|
</trans-unit>
|
2017-07-12 10:27:53 -04:00
|
|
|
<trans-unit id="651d7249d3a225037eb66f3433d98ad4a86f0a22" datatype="html">
|
|
|
|
<source><x id="START_TAG_DIV" ctype="x-div"/>with <x id="START_TAG_DIV" ctype="x-div"/>nested<x id="CLOSE_TAG_DIV" ctype="x-div"/> placeholders<x id="CLOSE_TAG_DIV" ctype="x-div"/></source>
|
|
|
|
<target><x id="START_TAG_DIV" ctype="x-div"/>with <x id="START_TAG_DIV" ctype="x-div"/>nested<x id="CLOSE_TAG_DIV" ctype="x-div"/> placeholders<x id="CLOSE_TAG_DIV" ctype="x-div"/></target>
|
|
|
|
<context-group purpose="location">
|
|
|
|
<context context-type="sourcefile">file.ts</context>
|
|
|
|
<context context-type="linenumber">11</context>
|
|
|
|
</context-group>
|
|
|
|
</trans-unit>
|
2017-03-13 06:40:44 -04:00
|
|
|
<trans-unit id="1fe4616cce80a57c7707bac1c97054aa8e244a67" datatype="html">
|
|
|
|
<source>on not translatable node</source>
|
|
|
|
<target>sur des balises non traductibles</target>
|
|
|
|
</trans-unit>
|
|
|
|
<trans-unit id="67162b5af5f15fd0eb6480c88688dafdf952b93a" datatype="html">
|
|
|
|
<source>on translatable node</source>
|
|
|
|
<target>sur des balises traductibles</target>
|
|
|
|
</trans-unit>
|
|
|
|
<trans-unit id="dc5536bb9e0e07291c185a0d306601a2ecd4813f" datatype="html">
|
2017-07-12 10:27:53 -04:00
|
|
|
<source>{VAR_PLURAL, plural, =0 {zero} =1 {one} =2 {two} other {<x id="START_BOLD_TEXT" ctype="x-b" equiv-text="<b>"/>many<x id="CLOSE_BOLD_TEXT" ctype="x-b" equiv-text="</b>"/>} }</source>
|
2017-03-13 06:40:44 -04:00
|
|
|
<target>{VAR_PLURAL, plural, =0 {zero} =1 {un} =2 {deux} other {<x id="START_BOLD_TEXT" ctype="x-b"/>beaucoup<x id="CLOSE_BOLD_TEXT" ctype="x-b"/>} }</target>
|
|
|
|
</trans-unit>
|
2018-01-22 15:23:10 -05:00
|
|
|
<trans-unit id="49feb201083cbd2c8bfc48a4ae11f105fb984876" datatype="html">
|
2017-03-13 06:40:44 -04:00
|
|
|
<source>
|
2018-01-22 15:23:10 -05:00
|
|
|
<x id="ICU" equiv-text="{sex, select, male {...} female {...}}"/>
|
2017-03-13 06:40:44 -04:00
|
|
|
</source>
|
|
|
|
<target><x id="ICU"/></target>
|
|
|
|
</trans-unit>
|
2018-01-22 15:23:10 -05:00
|
|
|
<trans-unit id="f3be30eb9a18f6e336cc3ca4dd66bbc3a35c5f97" datatype="html">
|
|
|
|
<source>{VAR_SELECT, select, other {other} male {m} female {f} }</source>
|
|
|
|
<target>{VAR_SELECT, select, other {autre} male {homme} female {femme}}</target>
|
2017-03-13 06:40:44 -04:00
|
|
|
</trans-unit>
|
2018-01-22 15:23:10 -05:00
|
|
|
<trans-unit id="cc16e9745fa0b95b2ebc2f18b47ed8e64fe5f0f9" datatype="html">
|
2017-03-13 06:40:44 -04:00
|
|
|
<source>
|
2017-07-12 10:27:53 -04:00
|
|
|
<x id="ICU" equiv-text="{sexB, select, m {...} f {...}}"/>
|
2017-03-13 06:40:44 -04:00
|
|
|
</source>
|
|
|
|
<target><x id="ICU"/></target>
|
|
|
|
</trans-unit>
|
2018-01-22 15:23:10 -05:00
|
|
|
<trans-unit id="4573f2edb0329d69afc2ab8c73c71e2f8b08f807" datatype="html">
|
|
|
|
<source>{VAR_SELECT, select, male {m} female {f} }</source>
|
|
|
|
<target>{VAR_SELECT, select, male {homme} female {femme} }</target>
|
2017-03-13 06:40:44 -04:00
|
|
|
</trans-unit>
|
|
|
|
<trans-unit id="d9879678f727b244bc7c7e20f22b63d98cb14890" datatype="html">
|
2017-07-12 10:27:53 -04:00
|
|
|
<source><x id="INTERPOLATION" equiv-text="{{ "count = " + count }}"/></source>
|
2017-03-13 06:40:44 -04:00
|
|
|
<target><x id="INTERPOLATION"/></target>
|
|
|
|
</trans-unit>
|
|
|
|
<trans-unit id="50dac33dc6fc0578884baac79d875785ed77c928" datatype="html">
|
2017-07-12 10:27:53 -04:00
|
|
|
<source>sex = <x id="INTERPOLATION" equiv-text="{{ sex }}"/></source>
|
2017-03-13 06:40:44 -04:00
|
|
|
<target>sexe = <x id="INTERPOLATION"/></target>
|
|
|
|
</trans-unit>
|
|
|
|
<trans-unit id="a46f833b1fe6ca49e8b97c18f4b7ea0b930c9383" datatype="html">
|
2017-07-12 10:27:53 -04:00
|
|
|
<source><x id="CUSTOM_NAME" equiv-text="{{ "custom name" //i18n(ph="CUSTOM_NAME") }}"/></source>
|
2017-03-13 06:40:44 -04:00
|
|
|
<target><x id="CUSTOM_NAME"/></target>
|
|
|
|
</trans-unit>
|
|
|
|
<trans-unit id="2ec983b4893bcd5b24af33bebe3ecba63868453c" datatype="html">
|
|
|
|
<source>in a translatable section</source>
|
|
|
|
<target>dans une section traductible</target>
|
|
|
|
</trans-unit>
|
2018-01-22 15:23:10 -05:00
|
|
|
<trans-unit id="7f6272480ea8e7ffab548da885ab8105ee2caa93" datatype="html">
|
2017-03-13 06:40:44 -04:00
|
|
|
<source>
|
2018-01-22 15:23:10 -05:00
|
|
|
<x id="START_HEADING_LEVEL1" ctype="x-h1" equiv-text="<h1>"/>Markers in html comments<x id="CLOSE_HEADING_LEVEL1" ctype="x-h1" equiv-text="</h1>"/>
|
2017-07-12 10:27:53 -04:00
|
|
|
<x id="START_TAG_DIV" ctype="x-div" equiv-text="<div>"/><x id="CLOSE_TAG_DIV" ctype="x-div" equiv-text="</div>"/>
|
|
|
|
<x id="START_TAG_DIV_1" ctype="x-div" equiv-text="<div>"/><x id="ICU" equiv-text="{count, plural, =0 {...} =1 {...} =2 {...} other {...}}"/><x id="CLOSE_TAG_DIV" ctype="x-div" equiv-text="</div>"/>
|
2017-03-13 06:40:44 -04:00
|
|
|
</source>
|
|
|
|
<target>
|
2017-07-13 07:55:15 -04:00
|
|
|
<x id="START_HEADING_LEVEL1" ctype="x-h1"/>Balises dans les commentaires html<x id="CLOSE_HEADING_LEVEL1" ctype="x-h1"/>
|
2017-03-13 06:40:44 -04:00
|
|
|
<x id="START_TAG_DIV" ctype="x-div"/><x id="CLOSE_TAG_DIV" ctype="x-div"/>
|
|
|
|
<x id="START_TAG_DIV_1" ctype="x-div"/><x id="ICU"/><x id="CLOSE_TAG_DIV" ctype="x-div"/>
|
|
|
|
</target>
|
|
|
|
</trans-unit>
|
|
|
|
<trans-unit id="93a30c67d4e6c9b37aecfe2ac0f2b5d366d7b520" datatype="html">
|
2017-07-12 10:27:53 -04:00
|
|
|
<source>it <x id="START_BOLD_TEXT" ctype="x-b" equiv-text="<b>"/>should<x id="CLOSE_BOLD_TEXT" ctype="x-b" equiv-text="</b>"/> work</source>
|
2017-03-13 06:40:44 -04:00
|
|
|
<target>ca <x id="START_BOLD_TEXT" ctype="x-b"/>devrait<x id="CLOSE_BOLD_TEXT" ctype="x-b"/> marcher</target>
|
|
|
|
</trans-unit>
|
|
|
|
<trans-unit id="i18n16" datatype="html">
|
|
|
|
<source>with an explicit ID</source>
|
|
|
|
<target>avec un ID explicite</target>
|
|
|
|
</trans-unit>
|
|
|
|
<trans-unit id="i18n17" datatype="html">
|
2017-07-12 10:27:53 -04:00
|
|
|
<source>{VAR_PLURAL, plural, =0 {zero} =1 {one} =2 {two} other {<x id="START_BOLD_TEXT" ctype="x-b" equiv-text="<b>"/>many<x id="CLOSE_BOLD_TEXT" ctype="x-b" equiv-text="</b>"/>} }</source>
|
2017-03-13 06:40:44 -04:00
|
|
|
<target>{VAR_PLURAL, plural, =0 {zero} =1 {un} =2 {deux} other {<x id="START_BOLD_TEXT" ctype="x-b"/>beaucoup<x id="CLOSE_BOLD_TEXT" ctype="x-b"/>} }</target>
|
|
|
|
</trans-unit>
|
|
|
|
<trans-unit id="2370d995bdcc1e7496baa32df20654aff65c2d10" datatype="html">
|
2017-07-12 10:27:53 -04:00
|
|
|
<source>{VAR_PLURAL, plural, =0 {Found no results} =1 {Found one result} other {Found <x id="INTERPOLATION" equiv-text="{{response.getItemsList().length}}"/> results} }</source>
|
2017-03-13 06:40:44 -04:00
|
|
|
<target>{VAR_PLURAL, plural, =0 {Pas de réponse} =1 {une réponse} other {Found <x id="INTERPOLATION"/> réponse} }</target>
|
|
|
|
<note priority="1" from="description">desc</note>
|
|
|
|
</trans-unit>
|
|
|
|
<trans-unit id="296ab5eab8d370822488c152586db3a5875ee1a2" datatype="html">
|
2017-07-12 10:27:53 -04:00
|
|
|
<source>foo<x id="START_LINK" ctype="x-a" equiv-text="<a>"/>bar<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/></source>
|
2017-03-13 06:40:44 -04:00
|
|
|
<target>FOO<x id="START_LINK" ctype="x-a"/>BAR<x id="CLOSE_LINK" ctype="x-a"/></target>
|
|
|
|
</trans-unit>
|
|
|
|
<trans-unit id="2e013b311caa0916478941a985887e091d8288b6" datatype="html">
|
2017-07-12 10:27:53 -04:00
|
|
|
<source><x id="MAP NAME" equiv-text="{{ 'test' //i18n(ph="map name") }}"/></source>
|
2017-03-13 06:40:44 -04:00
|
|
|
<target><x id="MAP NAME"/></target>
|
|
|
|
</trans-unit>`;
|
|
|
|
|
|
|
|
const XLIFF_EXTRACTED = `
|
|
|
|
<trans-unit id="3cb04208df1c2f62553ed48e75939cf7107f9dad" datatype="html">
|
|
|
|
<source>i18n attribute on tags</source>
|
2017-04-14 12:06:25 -04:00
|
|
|
<context-group purpose="location">
|
|
|
|
<context context-type="sourcefile">file.ts</context>
|
|
|
|
<context context-type="linenumber">3</context>
|
|
|
|
</context-group>
|
2017-03-13 06:40:44 -04:00
|
|
|
</trans-unit>
|
|
|
|
<trans-unit id="52895b1221effb3f3585b689f049d2784d714952" datatype="html">
|
|
|
|
<source>nested</source>
|
2017-04-14 12:06:25 -04:00
|
|
|
<context-group purpose="location">
|
|
|
|
<context context-type="sourcefile">file.ts</context>
|
|
|
|
<context context-type="linenumber">5</context>
|
|
|
|
</context-group>
|
2017-03-13 06:40:44 -04:00
|
|
|
</trans-unit>
|
|
|
|
<trans-unit id="88d5f22050a9df477ee5646153558b3a4862d47e" datatype="html">
|
|
|
|
<source>nested</source>
|
2017-04-14 12:06:25 -04:00
|
|
|
<context-group purpose="location">
|
|
|
|
<context context-type="sourcefile">file.ts</context>
|
|
|
|
<context context-type="linenumber">7</context>
|
|
|
|
</context-group>
|
2017-03-13 06:40:44 -04:00
|
|
|
<note priority="1" from="meaning">different meaning</note>
|
|
|
|
</trans-unit>
|
|
|
|
<trans-unit id="34fec9cc62e28e8aa6ffb306fa8569ef0a8087fe" datatype="html">
|
2017-07-12 10:27:53 -04:00
|
|
|
<source><x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="<i>"/>with placeholders<x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="</i>"/></source>
|
2017-04-14 12:06:25 -04:00
|
|
|
<context-group purpose="location">
|
|
|
|
<context context-type="sourcefile">file.ts</context>
|
|
|
|
<context context-type="linenumber">9</context>
|
|
|
|
</context-group>
|
|
|
|
<context-group purpose="location">
|
|
|
|
<context context-type="sourcefile">file.ts</context>
|
|
|
|
<context context-type="linenumber">10</context>
|
|
|
|
</context-group>
|
2017-03-13 06:40:44 -04:00
|
|
|
</trans-unit>
|
2017-07-12 10:27:53 -04:00
|
|
|
<trans-unit id="651d7249d3a225037eb66f3433d98ad4a86f0a22" datatype="html">
|
|
|
|
<source><x id="START_TAG_DIV" ctype="x-div" equiv-text="<div>"/>with <x id="START_TAG_DIV" ctype="x-div" equiv-text="<div>"/>nested<x id="CLOSE_TAG_DIV" ctype="x-div" equiv-text="</div>"/> placeholders<x id="CLOSE_TAG_DIV" ctype="x-div" equiv-text="</div>"/></source>
|
|
|
|
<context-group purpose="location">
|
|
|
|
<context context-type="sourcefile">file.ts</context>
|
|
|
|
<context context-type="linenumber">11</context>
|
|
|
|
</context-group>
|
|
|
|
</trans-unit>
|
2017-03-13 06:40:44 -04:00
|
|
|
<trans-unit id="1fe4616cce80a57c7707bac1c97054aa8e244a67" datatype="html">
|
|
|
|
<source>on not translatable node</source>
|
2017-04-14 12:06:25 -04:00
|
|
|
<context-group purpose="location">
|
|
|
|
<context context-type="sourcefile">file.ts</context>
|
2017-07-12 10:27:53 -04:00
|
|
|
<context context-type="linenumber">14</context>
|
2017-04-14 12:06:25 -04:00
|
|
|
</context-group>
|
2017-03-13 06:40:44 -04:00
|
|
|
</trans-unit>
|
|
|
|
<trans-unit id="67162b5af5f15fd0eb6480c88688dafdf952b93a" datatype="html">
|
|
|
|
<source>on translatable node</source>
|
2017-04-14 12:06:25 -04:00
|
|
|
<context-group purpose="location">
|
|
|
|
<context context-type="sourcefile">file.ts</context>
|
2017-07-12 10:27:53 -04:00
|
|
|
<context context-type="linenumber">15</context>
|
2017-04-14 12:06:25 -04:00
|
|
|
</context-group>
|
2017-03-13 06:40:44 -04:00
|
|
|
</trans-unit>
|
|
|
|
<trans-unit id="dc5536bb9e0e07291c185a0d306601a2ecd4813f" datatype="html">
|
2017-07-12 10:27:53 -04:00
|
|
|
<source>{VAR_PLURAL, plural, =0 {zero} =1 {one} =2 {two} other {<x id="START_BOLD_TEXT" ctype="x-b" equiv-text="<b>"/>many<x id="CLOSE_BOLD_TEXT" ctype="x-b" equiv-text="</b>"/>} }</source>
|
2017-04-14 12:06:25 -04:00
|
|
|
<context-group purpose="location">
|
|
|
|
<context context-type="sourcefile">file.ts</context>
|
2017-07-12 10:27:53 -04:00
|
|
|
<context context-type="linenumber">20</context>
|
2017-04-14 12:06:25 -04:00
|
|
|
</context-group>
|
|
|
|
<context-group purpose="location">
|
|
|
|
<context context-type="sourcefile">file.ts</context>
|
2017-07-12 10:27:53 -04:00
|
|
|
<context context-type="linenumber">37</context>
|
2017-04-14 12:06:25 -04:00
|
|
|
</context-group>
|
2017-03-13 06:40:44 -04:00
|
|
|
</trans-unit>
|
2018-01-22 15:23:10 -05:00
|
|
|
<trans-unit id="49feb201083cbd2c8bfc48a4ae11f105fb984876" datatype="html">
|
2017-03-13 06:40:44 -04:00
|
|
|
<source>
|
2018-01-22 15:23:10 -05:00
|
|
|
<x id="ICU" equiv-text="{sex, select, male {...} female {...} other {...}}"/>
|
2017-03-13 06:40:44 -04:00
|
|
|
</source>
|
2017-04-14 12:06:25 -04:00
|
|
|
<context-group purpose="location">
|
|
|
|
<context context-type="sourcefile">file.ts</context>
|
2017-07-12 10:27:53 -04:00
|
|
|
<context context-type="linenumber">22</context>
|
2017-04-14 12:06:25 -04:00
|
|
|
</context-group>
|
2017-03-13 06:40:44 -04:00
|
|
|
</trans-unit>
|
2018-01-22 15:23:10 -05:00
|
|
|
<trans-unit id="f3be30eb9a18f6e336cc3ca4dd66bbc3a35c5f97" datatype="html">
|
|
|
|
<source>{VAR_SELECT, select, male {m} female {f} other {other} }</source>
|
2017-04-14 12:06:25 -04:00
|
|
|
<context-group purpose="location">
|
|
|
|
<context context-type="sourcefile">file.ts</context>
|
2017-07-12 10:27:53 -04:00
|
|
|
<context context-type="linenumber">23</context>
|
2017-04-14 12:06:25 -04:00
|
|
|
</context-group>
|
2017-03-13 06:40:44 -04:00
|
|
|
</trans-unit>
|
2018-01-22 15:23:10 -05:00
|
|
|
<trans-unit id="cc16e9745fa0b95b2ebc2f18b47ed8e64fe5f0f9" datatype="html">
|
2017-03-13 06:40:44 -04:00
|
|
|
<source>
|
2018-01-22 15:23:10 -05:00
|
|
|
<x id="ICU" equiv-text="{sexB, select, male {...} female {...}}"/>
|
2017-03-13 06:40:44 -04:00
|
|
|
</source>
|
2017-04-14 12:06:25 -04:00
|
|
|
<context-group purpose="location">
|
|
|
|
<context context-type="sourcefile">file.ts</context>
|
2017-07-12 10:27:53 -04:00
|
|
|
<context context-type="linenumber">25</context>
|
2017-04-14 12:06:25 -04:00
|
|
|
</context-group>
|
2017-03-13 06:40:44 -04:00
|
|
|
</trans-unit>
|
2018-01-22 15:23:10 -05:00
|
|
|
<trans-unit id="4573f2edb0329d69afc2ab8c73c71e2f8b08f807" datatype="html">
|
|
|
|
<source>{VAR_SELECT, select, male {m} female {f} }</source>
|
2017-04-14 12:06:25 -04:00
|
|
|
<context-group purpose="location">
|
|
|
|
<context context-type="sourcefile">file.ts</context>
|
2017-07-12 10:27:53 -04:00
|
|
|
<context context-type="linenumber">26</context>
|
2017-04-14 12:06:25 -04:00
|
|
|
</context-group>
|
2017-03-13 06:40:44 -04:00
|
|
|
</trans-unit>
|
|
|
|
<trans-unit id="d9879678f727b244bc7c7e20f22b63d98cb14890" datatype="html">
|
2017-07-12 10:27:53 -04:00
|
|
|
<source><x id="INTERPOLATION" equiv-text="{{ "count = " + count }}"/></source>
|
2017-04-14 12:06:25 -04:00
|
|
|
<context-group purpose="location">
|
|
|
|
<context context-type="sourcefile">file.ts</context>
|
2017-07-12 10:27:53 -04:00
|
|
|
<context context-type="linenumber">29</context>
|
2017-04-14 12:06:25 -04:00
|
|
|
</context-group>
|
2017-03-13 06:40:44 -04:00
|
|
|
</trans-unit>
|
|
|
|
<trans-unit id="50dac33dc6fc0578884baac79d875785ed77c928" datatype="html">
|
2017-07-12 10:27:53 -04:00
|
|
|
<source>sex = <x id="INTERPOLATION" equiv-text="{{ sex }}"/></source>
|
2017-04-14 12:06:25 -04:00
|
|
|
<context-group purpose="location">
|
|
|
|
<context context-type="sourcefile">file.ts</context>
|
2017-07-12 10:27:53 -04:00
|
|
|
<context context-type="linenumber">30</context>
|
2017-04-14 12:06:25 -04:00
|
|
|
</context-group>
|
2017-03-13 06:40:44 -04:00
|
|
|
</trans-unit>
|
|
|
|
<trans-unit id="a46f833b1fe6ca49e8b97c18f4b7ea0b930c9383" datatype="html">
|
2017-07-12 10:27:53 -04:00
|
|
|
<source><x id="CUSTOM_NAME" equiv-text="{{ "custom name" //i18n(ph="CUSTOM_NAME") }}"/></source>
|
2017-04-14 12:06:25 -04:00
|
|
|
<context-group purpose="location">
|
|
|
|
<context context-type="sourcefile">file.ts</context>
|
2017-07-12 10:27:53 -04:00
|
|
|
<context context-type="linenumber">31</context>
|
2017-04-14 12:06:25 -04:00
|
|
|
</context-group>
|
2017-03-13 06:40:44 -04:00
|
|
|
</trans-unit>
|
|
|
|
<trans-unit id="2ec983b4893bcd5b24af33bebe3ecba63868453c" datatype="html">
|
|
|
|
<source>in a translatable section</source>
|
2017-04-14 12:06:25 -04:00
|
|
|
<context-group purpose="location">
|
|
|
|
<context context-type="sourcefile">file.ts</context>
|
2017-07-12 10:27:53 -04:00
|
|
|
<context context-type="linenumber">36</context>
|
2017-04-14 12:06:25 -04:00
|
|
|
</context-group>
|
|
|
|
<context-group purpose="location">
|
|
|
|
<context context-type="sourcefile">file.ts</context>
|
2017-07-12 10:27:53 -04:00
|
|
|
<context context-type="linenumber">54</context>
|
2017-04-14 12:06:25 -04:00
|
|
|
</context-group>
|
2017-03-13 06:40:44 -04:00
|
|
|
</trans-unit>
|
2018-01-22 15:23:10 -05:00
|
|
|
<trans-unit id="7f6272480ea8e7ffab548da885ab8105ee2caa93" datatype="html">
|
2017-03-13 06:40:44 -04:00
|
|
|
<source>
|
2018-01-22 15:23:10 -05:00
|
|
|
<x id="START_HEADING_LEVEL1" ctype="x-h1" equiv-text="<h1>"/>Markers in html comments<x id="CLOSE_HEADING_LEVEL1" ctype="x-h1" equiv-text="</h1>"/>
|
2017-07-12 10:27:53 -04:00
|
|
|
<x id="START_TAG_DIV" ctype="x-div" equiv-text="<div>"/><x id="CLOSE_TAG_DIV" ctype="x-div" equiv-text="</div>"/>
|
|
|
|
<x id="START_TAG_DIV_1" ctype="x-div" equiv-text="<div>"/><x id="ICU" equiv-text="{count, plural, =0 {...} =1 {...} =2 {...} other {...}}"/><x id="CLOSE_TAG_DIV" ctype="x-div" equiv-text="</div>"/>
|
2017-03-13 06:40:44 -04:00
|
|
|
</source>
|
2017-04-14 12:06:25 -04:00
|
|
|
<context-group purpose="location">
|
|
|
|
<context context-type="sourcefile">file.ts</context>
|
2017-07-12 10:27:53 -04:00
|
|
|
<context context-type="linenumber">34</context>
|
2017-04-14 12:06:25 -04:00
|
|
|
</context-group>
|
2017-03-13 06:40:44 -04:00
|
|
|
</trans-unit>
|
|
|
|
<trans-unit id="93a30c67d4e6c9b37aecfe2ac0f2b5d366d7b520" datatype="html">
|
2017-07-12 10:27:53 -04:00
|
|
|
<source>it <x id="START_BOLD_TEXT" ctype="x-b" equiv-text="<b>"/>should<x id="CLOSE_BOLD_TEXT" ctype="x-b" equiv-text="</b>"/> work</source>
|
2017-04-14 12:06:25 -04:00
|
|
|
<context-group purpose="location">
|
|
|
|
<context context-type="sourcefile">file.ts</context>
|
2017-07-12 10:27:53 -04:00
|
|
|
<context context-type="linenumber">40</context>
|
2017-04-14 12:06:25 -04:00
|
|
|
</context-group>
|
2017-03-13 06:40:44 -04:00
|
|
|
</trans-unit>
|
|
|
|
<trans-unit id="i18n16" datatype="html">
|
|
|
|
<source>with an explicit ID</source>
|
2017-04-14 12:06:25 -04:00
|
|
|
<context-group purpose="location">
|
|
|
|
<context context-type="sourcefile">file.ts</context>
|
2017-07-12 10:27:53 -04:00
|
|
|
<context context-type="linenumber">42</context>
|
2017-04-14 12:06:25 -04:00
|
|
|
</context-group>
|
2017-03-13 06:40:44 -04:00
|
|
|
</trans-unit>
|
|
|
|
<trans-unit id="i18n17" datatype="html">
|
2017-07-12 10:27:53 -04:00
|
|
|
<source>{VAR_PLURAL, plural, =0 {zero} =1 {one} =2 {two} other {<x id="START_BOLD_TEXT" ctype="x-b" equiv-text="<b>"/>many<x id="CLOSE_BOLD_TEXT" ctype="x-b" equiv-text="</b>"/>} }</source>
|
2017-04-14 12:06:25 -04:00
|
|
|
<context-group purpose="location">
|
|
|
|
<context context-type="sourcefile">file.ts</context>
|
2017-07-12 10:27:53 -04:00
|
|
|
<context context-type="linenumber">43</context>
|
2017-04-14 12:06:25 -04:00
|
|
|
</context-group>
|
2017-03-13 06:40:44 -04:00
|
|
|
</trans-unit>
|
|
|
|
<trans-unit id="2370d995bdcc1e7496baa32df20654aff65c2d10" datatype="html">
|
2017-07-12 10:27:53 -04:00
|
|
|
<source>{VAR_PLURAL, plural, =0 {Found no results} =1 {Found one result} other {Found <x id="INTERPOLATION" equiv-text="{{response.getItemsList().length}}"/> results} }</source>
|
2017-04-14 12:06:25 -04:00
|
|
|
<context-group purpose="location">
|
|
|
|
<context context-type="sourcefile">file.ts</context>
|
2017-07-12 10:27:53 -04:00
|
|
|
<context context-type="linenumber">46</context>
|
2017-04-14 12:06:25 -04:00
|
|
|
</context-group>
|
2017-03-13 06:40:44 -04:00
|
|
|
<note priority="1" from="description">desc</note>
|
|
|
|
</trans-unit>
|
|
|
|
<trans-unit id="296ab5eab8d370822488c152586db3a5875ee1a2" datatype="html">
|
2017-07-12 10:27:53 -04:00
|
|
|
<source>foo<x id="START_LINK" ctype="x-a" equiv-text="<a>"/>bar<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/></source>
|
2017-04-14 12:06:25 -04:00
|
|
|
<context-group purpose="location">
|
|
|
|
<context context-type="sourcefile">file.ts</context>
|
2017-07-12 10:27:53 -04:00
|
|
|
<context context-type="linenumber">54</context>
|
2017-04-14 12:06:25 -04:00
|
|
|
</context-group>
|
2017-03-13 06:40:44 -04:00
|
|
|
</trans-unit>
|
|
|
|
<trans-unit id="2e013b311caa0916478941a985887e091d8288b6" datatype="html">
|
2017-07-12 10:27:53 -04:00
|
|
|
<source><x id="MAP NAME" equiv-text="{{ 'test' //i18n(ph="map name") }}"/></source>
|
2017-04-14 12:06:25 -04:00
|
|
|
<context-group purpose="location">
|
|
|
|
<context context-type="sourcefile">file.ts</context>
|
2017-07-12 10:27:53 -04:00
|
|
|
<context context-type="linenumber">56</context>
|
2017-04-14 12:06:25 -04:00
|
|
|
</context-group>
|
2017-03-13 06:40:44 -04:00
|
|
|
</trans-unit>`;
|