diff --git a/packages/compiler-cli/test/compliance/r3_view_compiler_i18n_spec.ts b/packages/compiler-cli/test/compliance/r3_view_compiler_i18n_spec.ts
index 883efb8166..d73943213f 100644
--- a/packages/compiler-cli/test/compliance/r3_view_compiler_i18n_spec.ts
+++ b/packages/compiler-cli/test/compliance/r3_view_compiler_i18n_spec.ts
@@ -77,7 +77,7 @@ const verifyTranslationIds =
// verify that placeholders in translation string match
// placeholders object defined as goog.getMsg function argument
const verifyPlaceholdersIntegrity = (output: string) => {
- const extactTranslations = (from: string) => {
+ const extractTranslations = (from: string) => {
return extract(from, EXTRACT_GENERATED_TRANSLATIONS_REGEXP, v => [v[2], v[3]]);
};
const extractPlaceholdersFromBody = (body: string) => {
@@ -88,7 +88,7 @@ const verifyPlaceholdersIntegrity = (output: string) => {
const regex = /\s+"(.+?)":\s*".*?"/g;
return extract(args, regex, v => v[1]);
};
- const translations = extactTranslations(output);
+ const translations = extractTranslations(output);
translations.forEach((translation) => {
const bodyPhs = extractPlaceholdersFromBody(translation[0]);
const argsPhs = extractPlaceholdersFromArgs(translation[1]);
@@ -185,68 +185,117 @@ describe('i18n support in the view compiler', () => {
`;
const output = `
- /**
- * @desc descA
- * @meaning meaningA
- */
- const $MSG_EXTERNAL_idA$ = goog.getMsg("Content A");
- /**
- * @desc descB
- * @meaning meaningB
- */
- const $MSG_EXTERNAL_idB$ = goog.getMsg("Title B");
- const $_c0$ = ["title", $MSG_EXTERNAL_idB$];
- /**
- * @desc meaningC
- */
- const $MSG_EXTERNAL_4978592519614169666$$APP_SPEC_TS_3$ = goog.getMsg("Title C");
- const $_c1$ = ["title", $MSG_EXTERNAL_4978592519614169666$$APP_SPEC_TS_3$];
- /**
- * @desc descD
- * @meaning meaningD
- */
- const $MSG_EXTERNAL_5200291527729162531$$APP_SPEC_TS_5$ = goog.getMsg("Title D");
- const $_c2$ = ["title", $MSG_EXTERNAL_5200291527729162531$$APP_SPEC_TS_5$];
- /**
- * @desc meaningE
- */
- const $MSG_EXTERNAL_idE$$APP_SPEC_TS_7$ = goog.getMsg("Title E");
- const $_c3$ = ["title", $MSG_EXTERNAL_idE$$APP_SPEC_TS_7$];
- const $MSG_EXTERNAL_idF$$APP_SPEC_TS_9$ = goog.getMsg("Title F");
- const $_c4$ = ["title", $MSG_EXTERNAL_idF$$APP_SPEC_TS_9$];
- /**
- * @desc [BACKUP_MESSAGE_ID:idH]desc
- */
- const $MSG_EXTERNAL_idG$$APP_SPEC_TS_11$ = goog.getMsg("Title G");
- const $_c5$ = ["title", $MSG_EXTERNAL_idG$$APP_SPEC_TS_11$];
+ var $I18N_0$;
+ if (ngI18nClosureMode) {
+ /**
+ * @desc descA
+ * @meaning meaningA
+ */
+ const $MSG_EXTERNAL_idA$$APP_SPEC_TS_0$ = goog.getMsg("Content A");
+ $I18N_0$ = $MSG_EXTERNAL_idA$$APP_SPEC_TS_0$;
+ }
+ else {
+ $I18N_0$ = $r3$.Δi18nLocalize("Content A");
+ }
+ var $I18N_1$;
+ if (ngI18nClosureMode) {
+ /**
+ * @desc descB
+ * @meaning meaningB
+ */
+ const $MSG_EXTERNAL_idB$$APP_SPEC_TS_1$ = goog.getMsg("Title B");
+ $I18N_1$ = $MSG_EXTERNAL_idB$$APP_SPEC_TS_1$;
+ }
+ else {
+ $I18N_1$ = $r3$.Δi18nLocalize("Title B");
+ }
+ const $_c2$ = ["title", $I18N_1$];
+ var $I18N_3$;
+ if (ngI18nClosureMode) {
+ /**
+ * @desc meaningC
+ */
+ const $MSG_EXTERNAL_4978592519614169666$$APP_SPEC_TS_3$ = goog.getMsg("Title C");
+ $I18N_3$ = $MSG_EXTERNAL_4978592519614169666$$APP_SPEC_TS_3$;
+ }
+ else {
+ $I18N_3$ = $r3$.Δi18nLocalize("Title C");
+ }
+ const $_c4$ = ["title", $I18N_3$];
+ var $I18N_5$;
+ if (ngI18nClosureMode) {
+ /**
+ * @desc descD
+ * @meaning meaningD
+ */
+ const $MSG_EXTERNAL_5200291527729162531$$APP_SPEC_TS_5$ = goog.getMsg("Title D");
+ $I18N_5$ = $MSG_EXTERNAL_5200291527729162531$$APP_SPEC_TS_5$;
+ }
+ else {
+ $I18N_5$ = $r3$.Δi18nLocalize("Title D");
+ }
+ const $_c6$ = ["title", $I18N_5$];
+ var $I18N_7$;
+ if (ngI18nClosureMode) {
+ /**
+ * @desc meaningE
+ */
+ const $MSG_EXTERNAL_idE$$APP_SPEC_TS_7$ = goog.getMsg("Title E");
+ $I18N_7$ = $MSG_EXTERNAL_idE$$APP_SPEC_TS_7$;
+ }
+ else {
+ $I18N_7$ = $r3$.Δi18nLocalize("Title E");
+ }
+ const $_c8$ = ["title", $I18N_7$];
+ var $I18N_9$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_idF$$APP_SPEC_TS_9$ = goog.getMsg("Title F");
+ $I18N_9$ = $MSG_EXTERNAL_idF$$APP_SPEC_TS_9$;
+ }
+ else {
+ $I18N_9$ = $r3$.Δi18nLocalize("Title F");
+ }
+ const $_c10$ = ["title", $I18N_9$];
+ var $I18N_11$;
+ if (ngI18nClosureMode) {
+ /**
+ * @desc [BACKUP_MESSAGE_ID:idH]desc
+ */
+ const $MSG_EXTERNAL_idG$$APP_SPEC_TS_11$ = goog.getMsg("Title G");
+ $I18N_11$ = $MSG_EXTERNAL_idG$$APP_SPEC_TS_11$;
+ }
+ else {
+ $I18N_11$ = $r3$.Δi18nLocalize("Title G");
+ }
+ const $_c12$ = ["title", $I18N_11$];
…
template: function MyComponent_Template(rf, ctx) {
if (rf & 1) {
$r3$.ΔelementStart(0, "div");
- $r3$.Δi18n(1, $MSG_EXTERNAL_idA$$APP_SPEC_TS_0$);
+ $r3$.Δi18n(1, $I18N_0$);
$r3$.ΔelementEnd();
$r3$.ΔelementStart(2, "div");
- $r3$.Δi18nAttributes(3, $_c0$);
+ $r3$.Δi18nAttributes(3, $_c2$);
$r3$.Δtext(4, "Content B");
$r3$.ΔelementEnd();
$r3$.ΔelementStart(5, "div");
- $r3$.Δi18nAttributes(6, $_c1$);
+ $r3$.Δi18nAttributes(6, $_c4$);
$r3$.Δtext(7, "Content C");
$r3$.ΔelementEnd();
$r3$.ΔelementStart(8, "div");
- $r3$.Δi18nAttributes(9, $_c2$);
+ $r3$.Δi18nAttributes(9, $_c6$);
$r3$.Δtext(10, "Content D");
$r3$.ΔelementEnd();
$r3$.ΔelementStart(11, "div");
- $r3$.Δi18nAttributes(12, $_c3$);
+ $r3$.Δi18nAttributes(12, $_c8$);
$r3$.Δtext(13, "Content E");
$r3$.ΔelementEnd();
$r3$.ΔelementStart(14, "div");
- $r3$.Δi18nAttributes(15, $_c4$);
+ $r3$.Δi18nAttributes(15, $_c10$);
$r3$.Δtext(16, "Content F");
$r3$.ΔelementEnd();
$r3$.ΔelementStart(17, "div");
- $r3$.Δi18nAttributes(18, $_c5$);
+ $r3$.Δi18nAttributes(18, $_c12$);
$r3$.Δtext(19, "Content G");
$r3$.ΔelementEnd();
}
@@ -281,12 +330,19 @@ describe('i18n support in the view compiler', () => {
const output = `
const $_c0$ = ["id", "static"];
- /**
- * @desc d
- * @meaning m
- */
- const $MSG_EXTERNAL_8809028065680254561$$APP_SPEC_TS_1$ = goog.getMsg("introduction");
- const $_c1$ = ["title", $MSG_EXTERNAL_8809028065680254561$$APP_SPEC_TS_1$];
+ var $I18N_1$;
+ if (ngI18nClosureMode) {
+ /**
+ * @desc d
+ * @meaning m
+ */
+ const $MSG_EXTERNAL_8809028065680254561$$APP_SPEC_TS_1$ = goog.getMsg("introduction");
+ $I18N_1$ = $MSG_EXTERNAL_8809028065680254561$$APP_SPEC_TS_1$;
+ }
+ else {
+ $I18N_1$ = $r3$.Δi18nLocalize("introduction");
+ }
+ const $_c1$ = ["title", $I18N_1$];
…
template: function MyComponent_Template(rf, ctx) {
if (rf & 1) {
@@ -315,42 +371,83 @@ describe('i18n support in the view compiler', () => {
const output = String.raw `
const $_c0$ = ["id", "dynamic-1"];
- const $MSG_EXTERNAL_5526535577705876535$$APP_SPEC_TS_1$ = goog.getMsg("static text");
- /**
- * @desc d
- * @meaning m
- */
- const $MSG_EXTERNAL_8977039798304050198$$APP_SPEC_TS_2$ = goog.getMsg("intro {$interpolation}", {
- "interpolation": "\uFFFD0\uFFFD"
- });
- /**
- * @desc d1
- * @meaning m1
- */
- const $MSG_EXTERNAL_7432761130955693041$$APP_SPEC_TS_3$ = goog.getMsg("{$interpolation}", {
- "interpolation": "\uFFFD0\uFFFD"
- });
+ var $I18N_1$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_5526535577705876535$$APP_SPEC_TS_1$ = goog.getMsg("static text");
+ $I18N_1$ = $MSG_EXTERNAL_5526535577705876535$$APP_SPEC_TS_1$;
+ }
+ else {
+ $I18N_1$ = $r3$.Δi18nLocalize("static text");
+ }
+ var $I18N_2$;
+ if (ngI18nClosureMode) {
+ /**
+ * @desc d
+ * @meaning m
+ */
+ const $MSG_EXTERNAL_8977039798304050198$$APP_SPEC_TS_2$ = goog.getMsg("intro {$interpolation}", {
+ "interpolation": "\uFFFD0\uFFFD"
+ });
+ $I18N_2$ = $MSG_EXTERNAL_8977039798304050198$$APP_SPEC_TS_2$;
+ }
+ else {
+ $I18N_2$ = $r3$.Δi18nLocalize("intro {$interpolation}", {
+ "interpolation": "\uFFFD0\uFFFD"
+ });
+ }
+ var $I18N_3$;
+ if (ngI18nClosureMode) {
+ /**
+ * @desc d1
+ * @meaning m1
+ */
+ const $MSG_EXTERNAL_7432761130955693041$$APP_SPEC_TS_3$ = goog.getMsg("{$interpolation}", {
+ "interpolation": "\uFFFD0\uFFFD"
+ });
+ $I18N_3$ = $MSG_EXTERNAL_7432761130955693041$$APP_SPEC_TS_3$;
+ }
+ else {
+ $I18N_3$ = $r3$.Δi18nLocalize("{$interpolation}", {
+ "interpolation": "\uFFFD0\uFFFD"
+ });
+ }
const $_c1$ = [
- "aria-roledescription", $MSG_EXTERNAL_5526535577705876535$$APP_SPEC_TS_1$,
- "title", $MSG_EXTERNAL_8977039798304050198$$APP_SPEC_TS_2$,
- "aria-label", $MSG_EXTERNAL_7432761130955693041$$APP_SPEC_TS_3$
+ "aria-roledescription", $I18N_1$,
+ "title", $I18N_2$,
+ "aria-label", $I18N_3$
];
const $_c2$ = ["id", "dynamic-2"];
- /**
- * @desc d2
- * @meaning m2
- */
- const $MSG_EXTERNAL_7566208596013750546$$APP_SPEC_TS_6$ = goog.getMsg("{$interpolation} and {$interpolation_1} and again {$interpolation_2}", {
- "interpolation": "\uFFFD0\uFFFD",
- "interpolation_1": "\uFFFD1\uFFFD",
- "interpolation_2": "\uFFFD2\uFFFD"
- });
- const $MSG_EXTERNAL_6639222533406278123$$APP_SPEC_TS_7$ = goog.getMsg("{$interpolation}", {
- "interpolation": "\uFFFD0\uFFFD"
- });
+ var $I18N_6$;
+ if (ngI18nClosureMode) {
+ /**
+ * @desc d2
+ * @meaning m2
+ */
+ const $MSG_EXTERNAL_7566208596013750546$$APP_SPEC_TS_6$ = goog.getMsg("{$interpolation} and {$interpolation_1} and again {$interpolation_2}", {
+ "interpolation": "\uFFFD0\uFFFD", "interpolation_1": "\uFFFD1\uFFFD", "interpolation_2": "\uFFFD2\uFFFD"
+ });
+ $I18N_6$ = $MSG_EXTERNAL_7566208596013750546$$APP_SPEC_TS_6$;
+ }
+ else {
+ $I18N_6$ = $r3$.Δi18nLocalize("{$interpolation} and {$interpolation_1} and again {$interpolation_2}", {
+ "interpolation": "\uFFFD0\uFFFD", "interpolation_1": "\uFFFD1\uFFFD", "interpolation_2": "\uFFFD2\uFFFD"
+ });
+ }
+ var $I18N_7$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_6639222533406278123$$APP_SPEC_TS_7$ = goog.getMsg("{$interpolation}", {
+ "interpolation": "\uFFFD0\uFFFD"
+ });
+ $I18N_7$ = $MSG_EXTERNAL_6639222533406278123$$APP_SPEC_TS_7$;
+ }
+ else {
+ $I18N_7$ = $r3$.Δi18nLocalize("{$interpolation}", {
+ "interpolation": "\uFFFD0\uFFFD"
+ });
+ }
const $_c3$ = [
- "title", $MSG_EXTERNAL_7566208596013750546$$APP_SPEC_TS_6$,
- "aria-roledescription", $MSG_EXTERNAL_6639222533406278123$$APP_SPEC_TS_7$
+ "title", $I18N_6$,
+ "aria-roledescription", $I18N_7$
];
…
consts: 5,
@@ -389,10 +486,23 @@ describe('i18n support in the view compiler', () => {
`;
const output = String.raw `
- const $MSG_EXTERNAL_8977039798304050198$ = goog.getMsg("intro {$interpolation}", {
- "interpolation": "\uFFFD0\uFFFD"
- });
- const $_c0$ = ["title", $MSG_EXTERNAL_8977039798304050198$];
+ var $I18N_0$;
+ if (ngI18nClosureMode) {
+ /**
+ * @desc d
+ * @meaning m
+ */
+ const $MSG_EXTERNAL_8977039798304050198$ = goog.getMsg("intro {$interpolation}", {
+ "interpolation": "\uFFFD0\uFFFD"
+ });
+ $I18N_0$ = $MSG_EXTERNAL_8977039798304050198$;
+ }
+ else {
+ $I18N_0$ = $r3$.Δi18nLocalize("intro {$interpolation}", {
+ "interpolation": "\uFFFD0\uFFFD"
+ });
+ }
+ const $_c0$ = ["title", $I18N_0$];
…
template: function MyComponent_Template(rf, ctx) {
if (rf & 1) {
@@ -420,14 +530,23 @@ describe('i18n support in the view compiler', () => {
const output = String.raw `
const $_c0$ = [${AttributeMarker.Template}, "ngFor", "ngForOf"];
- /**
- * @desc d
- * @meaning m
- */
- const $MSG_EXTERNAL_8538466649243975456$$APP_SPEC_TS__1$ = goog.getMsg("different scope {$interpolation}", {
- "interpolation": "\uFFFD0\uFFFD"
- });
- const $_c1$ = ["title", $MSG_EXTERNAL_8538466649243975456$$APP_SPEC_TS__1$];
+ var $I18N_1$;
+ if (ngI18nClosureMode) {
+ /**
+ * @desc d
+ * @meaning m
+ */
+ const $MSG_EXTERNAL_8538466649243975456$$APP_SPEC_TS__1$ = goog.getMsg("different scope {$interpolation}", {
+ "interpolation": "\uFFFD0\uFFFD"
+ });
+ $I18N_1$ = $MSG_EXTERNAL_8538466649243975456$$APP_SPEC_TS__1$;
+ }
+ else {
+ $I18N_1$ = $r3$.Δi18nLocalize("different scope {$interpolation}", {
+ "interpolation": "\uFFFD0\uFFFD"
+ });
+ }
+ const $_c1$ = ["title", $I18N_1$];
function MyComponent_div_0_Template(rf, ctx) {
if (rf & 1) {
$r3$.ΔelementStart(0, "div");
@@ -476,42 +595,83 @@ describe('i18n support in the view compiler', () => {
const output = String.raw `
const $_c0$ = ["id", "dynamic-1"];
- const $MSG_EXTERNAL_5526535577705876535$$APP_SPEC_TS_1$ = goog.getMsg("static text");
- /**
- * @desc d
- * @meaning m
- */
- const $MSG_EXTERNAL_8977039798304050198$$APP_SPEC_TS_2$ = goog.getMsg("intro {$interpolation}", {
- "interpolation": "\uFFFD0\uFFFD"
- });
- /**
- * @desc d1
- * @meaning m1
- */
- const $MSG_EXTERNAL_7432761130955693041$$APP_SPEC_TS_3$ = goog.getMsg("{$interpolation}", {
- "interpolation": "\uFFFD0\uFFFD"
- });
+ var $I18N_1$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_5526535577705876535$$APP_SPEC_TS_1$ = goog.getMsg("static text");
+ $I18N_1$ = $MSG_EXTERNAL_5526535577705876535$$APP_SPEC_TS_1$;
+ }
+ else {
+ $I18N_1$ = $r3$.Δi18nLocalize("static text");
+ }
+ var $I18N_2$;
+ if (ngI18nClosureMode) {
+ /**
+ * @desc d
+ * @meaning m
+ */
+ const $MSG_EXTERNAL_8977039798304050198$$APP_SPEC_TS_2$ = goog.getMsg("intro {$interpolation}", {
+ "interpolation": "\uFFFD0\uFFFD"
+ });
+ $I18N_2$ = $MSG_EXTERNAL_8977039798304050198$$APP_SPEC_TS_2$;
+ }
+ else {
+ $I18N_2$ = $r3$.Δi18nLocalize("intro {$interpolation}", {
+ "interpolation": "\uFFFD0\uFFFD"
+ });
+ }
+ var $I18N_3$;
+ if (ngI18nClosureMode) {
+ /**
+ * @desc d1
+ * @meaning m1
+ */
+ const $MSG_EXTERNAL_7432761130955693041$$APP_SPEC_TS_3$ = goog.getMsg("{$interpolation}", {
+ "interpolation": "\uFFFD0\uFFFD"
+ });
+ $I18N_3$ = $MSG_EXTERNAL_7432761130955693041$$APP_SPEC_TS_3$;
+ }
+ else {
+ $I18N_3$ = $r3$.Δi18nLocalize("{$interpolation}", {
+ "interpolation": "\uFFFD0\uFFFD"
+ });
+ }
const $_c1$ = [
- "aria-roledescription", $MSG_EXTERNAL_5526535577705876535$$APP_SPEC_TS_1$,
- "title", $MSG_EXTERNAL_8977039798304050198$$APP_SPEC_TS_2$,
- "aria-label", $MSG_EXTERNAL_7432761130955693041$$APP_SPEC_TS_3$
+ "aria-roledescription", $I18N_1$,
+ "title", $I18N_2$,
+ "aria-label", $I18N_3$
];
const $_c2$ = ["id", "dynamic-2"];
- /**
- * @desc d2
- * @meaning m2
- */
- const $MSG_EXTERNAL_7566208596013750546$$APP_SPEC_TS_6$ = goog.getMsg("{$interpolation} and {$interpolation_1} and again {$interpolation_2}", {
- "interpolation": "\uFFFD0\uFFFD",
- "interpolation_1": "\uFFFD1\uFFFD",
- "interpolation_2": "\uFFFD2\uFFFD"
- });
- const $MSG_EXTERNAL_6639222533406278123$$APP_SPEC_TS_7$ = goog.getMsg("{$interpolation}", {
- "interpolation": "\uFFFD0\uFFFD"
- });
+ var $I18N_6$;
+ if (ngI18nClosureMode) {
+ /**
+ * @desc d2
+ * @meaning m2
+ */
+ const $MSG_EXTERNAL_7566208596013750546$$APP_SPEC_TS_6$ = goog.getMsg("{$interpolation} and {$interpolation_1} and again {$interpolation_2}", {
+ "interpolation": "\uFFFD0\uFFFD", "interpolation_1": "\uFFFD1\uFFFD", "interpolation_2": "\uFFFD2\uFFFD"
+ });
+ $I18N_6$ = $MSG_EXTERNAL_7566208596013750546$$APP_SPEC_TS_6$;
+ }
+ else {
+ $I18N_6$ = $r3$.Δi18nLocalize("{$interpolation} and {$interpolation_1} and again {$interpolation_2}", {
+ "interpolation": "\uFFFD0\uFFFD", "interpolation_1": "\uFFFD1\uFFFD", "interpolation_2": "\uFFFD2\uFFFD"
+ });
+ }
+ var $I18N_7$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_6639222533406278123$$APP_SPEC_TS_7$ = goog.getMsg("{$interpolation}", {
+ "interpolation": "\uFFFD0\uFFFD"
+ });
+ $I18N_7$ = $MSG_EXTERNAL_6639222533406278123$$APP_SPEC_TS_7$;
+ }
+ else {
+ $I18N_7$ = $r3$.Δi18nLocalize("{$interpolation}", {
+ "interpolation": "\uFFFD0\uFFFD"
+ });
+ }
const $_c3$ = [
- "title", $MSG_EXTERNAL_7566208596013750546$$APP_SPEC_TS_6$,
- "aria-roledescription", $MSG_EXTERNAL_6639222533406278123$$APP_SPEC_TS_7$
+ "title", $I18N_6$,
+ "aria-roledescription", $I18N_7$
];
…
consts: 5,
@@ -553,14 +713,23 @@ describe('i18n support in the view compiler', () => {
const output = String.raw `
const $_c0$ = [${AttributeMarker.Template}, "ngFor", "ngForOf"];
- /**
- * @desc d
- * @meaning m
- */
- const $MSG_EXTERNAL_8538466649243975456$$APP_SPEC_TS__1$ = goog.getMsg("different scope {$interpolation}", {
- "interpolation": "\uFFFD0\uFFFD"
- });
- const $_c1$ = ["title", $MSG_EXTERNAL_8538466649243975456$$APP_SPEC_TS__1$];
+ var $I18N_1$;
+ if (ngI18nClosureMode) {
+ /**
+ * @desc d
+ * @meaning m
+ */
+ const $MSG_EXTERNAL_8538466649243975456$$APP_SPEC_TS__1$ = goog.getMsg("different scope {$interpolation}", {
+ "interpolation": "\uFFFD0\uFFFD"
+ });
+ $I18N_1$ = $MSG_EXTERNAL_8538466649243975456$$APP_SPEC_TS__1$;
+ }
+ else {
+ $I18N_1$ = $r3$.Δi18nLocalize("different scope {$interpolation}", {
+ "interpolation": "\uFFFD0\uFFFD"
+ });
+ }
+ const $_c1$ = ["title", $I18N_1$];
function MyComponent_div_0_Template(rf, ctx) {
if (rf & 1) {
$r3$.ΔelementStart(0, "div");
@@ -600,19 +769,33 @@ describe('i18n support in the view compiler', () => {
`;
const output = String.raw `
- /**
- * @desc d
- * @meaning m
- */
- const $MSG_EXTERNAL_7727043314656808423$$APP_SPEC_TS_1$ = goog.getMsg("Element title");
- const $_c0$ = ["title", $MSG_EXTERNAL_7727043314656808423$$APP_SPEC_TS_1$];
- const $MSG_EXTERNAL_4969674997806975147$$APP_SPEC_TS_0$ = goog.getMsg("Some content");
+ var $I18N_0$;
+ if (ngI18nClosureMode) {
+ /**
+ * @desc d
+ * @meaning m
+ */
+ const $MSG_EXTERNAL_7727043314656808423$$APP_SPEC_TS_0$ = goog.getMsg("Element title");
+ $I18N_0$ = $MSG_EXTERNAL_7727043314656808423$$APP_SPEC_TS_0$;
+ }
+ else {
+ $I18N_0$ = $r3$.Δi18nLocalize("Element title");
+ }
+ const $_c1$ = ["title", $I18N_0$];
+ var $I18N_2$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_4969674997806975147$$APP_SPEC_TS_2$ = goog.getMsg("Some content");
+ $I18N_2$ = $MSG_EXTERNAL_4969674997806975147$$APP_SPEC_TS_2$;
+ }
+ else {
+ $I18N_2$ = $r3$.Δi18nLocalize("Some content");
+ }
…
template: function MyComponent_Template(rf, ctx) {
if (rf & 1) {
$r3$.ΔelementStart(0, "div");
- $r3$.Δi18nAttributes(1, $_c0$);
- $r3$.Δi18n(2, $MSG_EXTERNAL_4969674997806975147$$APP_SPEC_TS_0$);
+ $r3$.Δi18nAttributes(1, $_c1$);
+ $r3$.Δi18n(2, $I18N_2$);
$r3$.ΔelementEnd();
}
}
@@ -621,7 +804,7 @@ describe('i18n support in the view compiler', () => {
verify(input, output);
});
- it('should sanitize ids and generate proper const names', () => {
+ it('should sanitize ids and generate proper var names', () => {
const input = `
Some content
@@ -629,9 +812,23 @@ describe('i18n support in the view compiler', () => {
`;
const output = String.raw `
- const MSG_EXTERNAL_ID_WITH_INVALID_CHARS$$APP_SPEC_TS_0 = goog.getMsg("Element title");
- const $_c1$ = ["title", MSG_EXTERNAL_ID_WITH_INVALID_CHARS$$APP_SPEC_TS_0];
- const MSG_EXTERNAL_ID_WITH_INVALID_CHARS_2$$APP_SPEC_TS_2 = goog.getMsg(" Some content ");
+ var $I18N_0$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_ID_WITH_INVALID_CHARS$$APP_SPEC_TS_1$ = goog.getMsg("Element title");
+ $I18N_0$ = $MSG_EXTERNAL_ID_WITH_INVALID_CHARS$$APP_SPEC_TS_1$;
+ }
+ else {
+ $I18N_0$ = $r3$.Δi18nLocalize("Element title");
+ }
+ const $_c1$ = ["title", $I18N_0$];
+ var $I18N_2$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_ID_WITH_INVALID_CHARS_2$$APP_SPEC_TS_4$ = goog.getMsg(" Some content ");
+ $I18N_2$ = $MSG_EXTERNAL_ID_WITH_INVALID_CHARS_2$$APP_SPEC_TS_4$;
+ }
+ else {
+ $I18N_2$ = $r3$.Δi18nLocalize(" Some content ");
+ }
…
`;
@@ -676,7 +873,14 @@ describe('i18n support in the view compiler', () => {
`;
const output = String.raw `
- const $MSG_EXTERNAL_4924931801512133405$$APP_SPEC_TS_0$ = goog.getMsg("Some text 'with single quotes', \"with double quotes\" and without quotes.");
+ var $I18N_0$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_4924931801512133405$$APP_SPEC_TS_0$ = goog.getMsg("Some text 'with single quotes', \"with double quotes\" and without quotes.");
+ $I18N_0$ = $MSG_EXTERNAL_4924931801512133405$$APP_SPEC_TS_0$;
+ }
+ else {
+ $I18N_0$ = $r3$.Δi18nLocalize("Some text 'with single quotes', \"with double quotes\" and without quotes.");
+ }
`;
verify(input, output);
@@ -692,26 +896,47 @@ describe('i18n support in the view compiler', () => {
`;
const output = String.raw `
- const $MSG_EXTERNAL_4890179241114413722$$APP_SPEC_TS_0$ = goog.getMsg("My i18n block #1");
- const $MSG_EXTERNAL_2413150872298537152$$APP_SPEC_TS_1$ = goog.getMsg("My i18n block #2");
- const $MSG_EXTERNAL_5023003143537152794$$APP_SPEC_TS_2$ = goog.getMsg("My i18n block #3");
+ var $I18N_0$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_4890179241114413722$$APP_SPEC_TS_0$ = goog.getMsg("My i18n block #1");
+ $I18N_0$ = $MSG_EXTERNAL_4890179241114413722$$APP_SPEC_TS_0$;
+ }
+ else {
+ $I18N_0$ = $r3$.Δi18nLocalize("My i18n block #1");
+ }
+ var $I18N_1$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_2413150872298537152$$APP_SPEC_TS_1$ = goog.getMsg("My i18n block #2");
+ $I18N_1$ = $MSG_EXTERNAL_2413150872298537152$$APP_SPEC_TS_1$;
+ }
+ else {
+ $I18N_1$ = $r3$.Δi18nLocalize("My i18n block #2");
+ }
+ var $I18N_2$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_5023003143537152794$$APP_SPEC_TS_2$ = goog.getMsg("My i18n block #3");
+ $I18N_2$ = $MSG_EXTERNAL_5023003143537152794$$APP_SPEC_TS_2$;
+ }
+ else {
+ $I18N_2$ = $r3$.Δi18nLocalize("My i18n block #3");
+ }
…
template: function MyComponent_Template(rf, ctx) {
if (rf & 1) {
$r3$.ΔelementStart(0, "div");
- $r3$.Δi18n(1, $MSG_EXTERNAL_4890179241114413722$$APP_SPEC_TS_0$);
+ $r3$.Δi18n(1, $I18N_0$);
$r3$.ΔelementEnd();
$r3$.ΔelementStart(2, "div");
$r3$.Δtext(3, "My non-i18n block #1");
$r3$.ΔelementEnd();
$r3$.ΔelementStart(4, "div");
- $r3$.Δi18n(5, $MSG_EXTERNAL_2413150872298537152$$APP_SPEC_TS_1$);
+ $r3$.Δi18n(5, $I18N_1$);
$r3$.ΔelementEnd();
$r3$.ΔelementStart(6, "div");
$r3$.Δtext(7, "My non-i18n block #2");
$r3$.ΔelementEnd();
$r3$.ΔelementStart(8, "div");
- $r3$.Δi18n(9, $MSG_EXTERNAL_5023003143537152794$$APP_SPEC_TS_2$);
+ $r3$.Δi18n(9, $I18N_2$);
$r3$.ΔelementEnd();
}
}
@@ -726,16 +951,25 @@ describe('i18n support in the view compiler', () => {
`;
const output = String.raw `
- const $MSG_EXTERNAL_2817319788724342848$$APP_SPEC_TS_0$ = goog.getMsg("Some value: {$phA}", {
- "phA": "\uFFFD0\uFFFD"
- });
+ var $I18N_0$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_2817319788724342848$$APP_SPEC_TS_0$ = goog.getMsg("Some value: {$phA}", {
+ "phA": "\uFFFD0\uFFFD"
+ });
+ $I18N_0$ = $MSG_EXTERNAL_2817319788724342848$$APP_SPEC_TS_0$;
+ }
+ else {
+ $I18N_0$ = $r3$.Δi18nLocalize("Some value: {$phA}", {
+ "phA": "\uFFFD0\uFFFD"
+ });
+ }
…
consts: 2,
vars: 1,
template: function MyComponent_Template(rf, ctx) {
if (rf & 1) {
$r3$.ΔelementStart(0, "div");
- $r3$.Δi18n(1, $MSG_EXTERNAL_2817319788724342848$$APP_SPEC_TS_0$);
+ $r3$.Δi18n(1, $I18N_0$);
$r3$.ΔelementEnd();
}
if (rf & 2) {
@@ -755,14 +989,23 @@ describe('i18n support in the view compiler', () => {
`;
const output = String.raw `
- const $MSG_EXTERNAL_6749967533321674787$ = goog.getMsg("{$interpolation}", {
- "interpolation": "\uFFFD0\uFFFD"
- });
+ var $I18N_0$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_6749967533321674787$$APP_SPEC_TS_0$ = goog.getMsg("{$interpolation}", {
+ "interpolation": "\uFFFD0\uFFFD"
+ });
+ $I18N_0$ = $MSG_EXTERNAL_6749967533321674787$$APP_SPEC_TS_0$;
+ }
+ else {
+ $I18N_0$ = $r3$.Δi18nLocalize("{$interpolation}", {
+ "interpolation": "\uFFFD0\uFFFD"
+ });
+ }
…
template: function MyComponent_Template(rf, ctx) {
if (rf & 1) {
$r3$.ΔelementStart(0, "div");
- $r3$.Δi18n(1, $MSG_EXTERNAL_6749967533321674787$);
+ $r3$.Δi18n(1, $I18N_0$);
$r3$.ΔelementEnd();
}
if (rf & 2) {
@@ -784,15 +1027,25 @@ describe('i18n support in the view compiler', () => {
`;
const output = String.raw `
- const $MSG_EXTERNAL_1482713963707913023$$APP_SPEC_TS_0$ = goog.getMsg(" {$interpolation} {$interpolation_1} ", {
- "interpolation": "\uFFFD0\uFFFD",
- "interpolation_1": "\uFFFD1\uFFFD"
- });
+ var $I18N_0$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_1482713963707913023$$APP_SPEC_TS_0$ = goog.getMsg(" {$interpolation} {$interpolation_1} ", {
+ "interpolation": "\uFFFD0\uFFFD",
+ "interpolation_1": "\uFFFD1\uFFFD"
+ });
+ $I18N_0$ = $MSG_EXTERNAL_1482713963707913023$$APP_SPEC_TS_0$;
+ }
+ else {
+ $I18N_0$ = $r3$.Δi18nLocalize(" {$interpolation} {$interpolation_1} ", {
+ "interpolation": "\uFFFD0\uFFFD",
+ "interpolation_1": "\uFFFD1\uFFFD"
+ });
+ }
…
template: function MyComponent_Template(rf, ctx) {
if (rf & 1) {
$r3$.ΔelementStart(0, "div");
- $r3$.Δi18n(1, $MSG_EXTERNAL_1482713963707913023$$APP_SPEC_TS_0$);
+ $r3$.Δi18n(1, $I18N_0$);
$r3$.Δpipe(2, "async");
$r3$.ΔelementEnd();
}
@@ -815,29 +1068,56 @@ describe('i18n support in the view compiler', () => {
`;
const output = String.raw `
- const $MSG_EXTERNAL_572579892698764378$$APP_SPEC_TS_0$ = goog.getMsg("My i18n block #{$interpolation}", {
- "interpolation": "\uFFFD0\uFFFD"
- });
- const $MSG_EXTERNAL_609623417156596326$$APP_SPEC_TS_1$ = goog.getMsg("My i18n block #{$interpolation}", {
- "interpolation": "\uFFFD0\uFFFD"
- });
- const $MSG_EXTERNAL_3998119318957372120$$APP_SPEC_TS_2$ = goog.getMsg("My i18n block #{$interpolation}", {
- "interpolation": "\uFFFD0\uFFFD"
- });
+ var $I18N_0$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_572579892698764378$$APP_SPEC_TS_0$ = goog.getMsg("My i18n block #{$interpolation}", {
+ "interpolation": "\uFFFD0\uFFFD"
+ });
+ $I18N_0$ = $MSG_EXTERNAL_572579892698764378$$APP_SPEC_TS_0$;
+ }
+ else {
+ $I18N_0$ = $r3$.Δi18nLocalize("My i18n block #{$interpolation}", {
+ "interpolation": "\uFFFD0\uFFFD"
+ });
+ }
+ var $I18N_1$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_609623417156596326$$APP_SPEC_TS_1$ = goog.getMsg("My i18n block #{$interpolation}", {
+ "interpolation": "\uFFFD0\uFFFD"
+ });
+ $I18N_1$ = $MSG_EXTERNAL_609623417156596326$$APP_SPEC_TS_1$;
+ }
+ else {
+ $I18N_1$ = $r3$.Δi18nLocalize("My i18n block #{$interpolation}", {
+ "interpolation": "\uFFFD0\uFFFD"
+ });
+ }
+ var $I18N_2$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_3998119318957372120$$APP_SPEC_TS_2$ = goog.getMsg("My i18n block #{$interpolation}", {
+ "interpolation": "\uFFFD0\uFFFD"
+ });
+ $I18N_2$ = $MSG_EXTERNAL_3998119318957372120$$APP_SPEC_TS_2$;
+ }
+ else {
+ $I18N_2$ = $r3$.Δi18nLocalize("My i18n block #{$interpolation}", {
+ "interpolation": "\uFFFD0\uFFFD"
+ });
+ }
…
consts: 7,
vars: 5,
template: function MyComponent_Template(rf, ctx) {
if (rf & 1) {
$r3$.ΔelementStart(0, "div");
- $r3$.Δi18n(1, $MSG_EXTERNAL_572579892698764378$$APP_SPEC_TS_0$);
+ $r3$.Δi18n(1, $I18N_0$);
$r3$.ΔelementEnd();
$r3$.ΔelementStart(2, "div");
- $r3$.Δi18n(3, $MSG_EXTERNAL_609623417156596326$$APP_SPEC_TS_1$);
+ $r3$.Δi18n(3, $I18N_1$);
$r3$.Δpipe(4, "uppercase");
$r3$.ΔelementEnd();
$r3$.ΔelementStart(5, "div");
- $r3$.Δi18n(6, $MSG_EXTERNAL_3998119318957372120$$APP_SPEC_TS_2$);
+ $r3$.Δi18n(6, $I18N_2$);
$r3$.ΔelementEnd();
}
if (rf & 2) {
@@ -876,32 +1156,57 @@ describe('i18n support in the view compiler', () => {
`;
const output = String.raw `
- const $MSG_EXTERNAL_7905233330103651696$$APP_SPEC_TS_0$ = goog.getMsg(" My i18n block #{$interpolation} {$startTagSpan}Plain text in nested element{$closeTagSpan}", {
- "interpolation": "\uFFFD0\uFFFD",
- "startTagSpan": "\uFFFD#2\uFFFD",
- "closeTagSpan": "\uFFFD/#2\uFFFD"
- });
- const $MSG_EXTERNAL_5788821996131681377$$APP_SPEC_TS_1$ = goog.getMsg(" My i18n block #{$interpolation} {$startTagDiv}{$startTagDiv}{$startTagSpan} More bindings in more nested element: {$interpolation_1} {$closeTagSpan}{$closeTagDiv}{$closeTagDiv}", {
- "interpolation": "\uFFFD0\uFFFD",
- "startTagDiv": "[\uFFFD#6\uFFFD|\uFFFD#7\uFFFD]",
- "startTagSpan": "\uFFFD#8\uFFFD",
- "interpolation_1": "\uFFFD1\uFFFD",
- "closeTagSpan": "\uFFFD/#8\uFFFD",
- "closeTagDiv": "[\uFFFD/#7\uFFFD|\uFFFD/#6\uFFFD]"
- });
- const $I18N_EXTERNAL_5788821996131681377$$APP_SPEC_TS_1$ = $r3$.Δi18nPostprocess($MSG_EXTERNAL_5788821996131681377$$APP_SPEC_TS_1$);
+ var $I18N_0$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_7905233330103651696$$APP_SPEC_TS_0$ = goog.getMsg(" My i18n block #{$interpolation} {$startTagSpan}Plain text in nested element{$closeTagSpan}", {
+ "interpolation": "\uFFFD0\uFFFD",
+ "startTagSpan": "\uFFFD#2\uFFFD",
+ "closeTagSpan": "\uFFFD/#2\uFFFD"
+ });
+ $I18N_0$ = $MSG_EXTERNAL_7905233330103651696$$APP_SPEC_TS_0$;
+ }
+ else {
+ $I18N_0$ = $r3$.Δi18nLocalize(" My i18n block #{$interpolation} {$startTagSpan}Plain text in nested element{$closeTagSpan}", {
+ "interpolation": "\uFFFD0\uFFFD",
+ "startTagSpan": "\uFFFD#2\uFFFD",
+ "closeTagSpan": "\uFFFD/#2\uFFFD"
+ });
+ }
+ var $I18N_1$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_5788821996131681377$$APP_SPEC_TS_1$ = goog.getMsg(" My i18n block #{$interpolation} {$startTagDiv}{$startTagDiv}{$startTagSpan} More bindings in more nested element: {$interpolation_1} {$closeTagSpan}{$closeTagDiv}{$closeTagDiv}", {
+ "interpolation": "\uFFFD0\uFFFD",
+ "startTagDiv": "[\uFFFD#6\uFFFD|\uFFFD#7\uFFFD]",
+ "startTagSpan": "\uFFFD#8\uFFFD",
+ "interpolation_1": "\uFFFD1\uFFFD",
+ "closeTagSpan": "\uFFFD/#8\uFFFD",
+ "closeTagDiv": "[\uFFFD/#7\uFFFD|\uFFFD/#6\uFFFD]"
+ });
+ $I18N_1$ = $MSG_EXTERNAL_5788821996131681377$$APP_SPEC_TS_1$;
+ }
+ else {
+ $I18N_1$ = $r3$.Δi18nLocalize(" My i18n block #{$interpolation} {$startTagDiv}{$startTagDiv}{$startTagSpan} More bindings in more nested element: {$interpolation_1} {$closeTagSpan}{$closeTagDiv}{$closeTagDiv}", {
+ "interpolation": "\uFFFD0\uFFFD",
+ "startTagDiv": "[\uFFFD#6\uFFFD|\uFFFD#7\uFFFD]",
+ "startTagSpan": "\uFFFD#8\uFFFD",
+ "interpolation_1": "\uFFFD1\uFFFD",
+ "closeTagSpan": "\uFFFD/#8\uFFFD",
+ "closeTagDiv": "[\uFFFD/#7\uFFFD|\uFFFD/#6\uFFFD]"
+ });
+ }
+ $I18N_1$ = $r3$.Δi18nPostprocess($I18N_1$);
…
consts: 9,
vars: 5,
template: function MyComponent_Template(rf, ctx) {
if (rf & 1) {
$r3$.ΔelementStart(0, "div");
- $r3$.Δi18nStart(1, $MSG_EXTERNAL_7905233330103651696$$APP_SPEC_TS_0$);
+ $r3$.Δi18nStart(1, $I18N_0$);
$r3$.Δelement(2, "span");
$r3$.Δi18nEnd();
$r3$.ΔelementEnd();
$r3$.ΔelementStart(3, "div");
- $r3$.Δi18nStart(4, $I18N_EXTERNAL_5788821996131681377$$APP_SPEC_TS_1$);
+ $r3$.Δi18nStart(4, $I18N_1$);
$r3$.Δpipe(5, "uppercase");
$r3$.ΔelementStart(6, "div");
$r3$.ΔelementStart(7, "div");
@@ -943,40 +1248,83 @@ describe('i18n support in the view compiler', () => {
`;
const output = String.raw `
- const $MSG_EXTERNAL_4782264005467235841$$APP_SPEC_TS_1$ = goog.getMsg("Span title {$interpolation} and {$interpolation_1}", {
- "interpolation": "\uFFFD0\uFFFD",
- "interpolation_1": "\uFFFD1\uFFFD"
- });
- const $_c0$ = ["title", $MSG_EXTERNAL_4782264005467235841$$APP_SPEC_TS_1$];
- const $MSG_EXTERNAL_4446430594603971069$$APP_SPEC_TS_0$ = goog.getMsg(" My i18n block #1 with value: {$interpolation} {$startTagSpan} Plain text in nested element (block #1) {$closeTagSpan}", {
- "interpolation": "\uFFFD0\uFFFD",
- "startTagSpan": "\uFFFD#2\uFFFD",
- "closeTagSpan": "\uFFFD/#2\uFFFD"
- });
- const $MSG_EXTERNAL_2719594642740200058$$APP_SPEC_TS_4$ = goog.getMsg("Span title {$interpolation}", { "interpolation": "\uFFFD0\uFFFD" });
- const $_c1$ = ["title", $MSG_EXTERNAL_2719594642740200058$$APP_SPEC_TS_4$];
- const $MSG_EXTERNAL_2778714953278357902$$APP_SPEC_TS_3$ = goog.getMsg(" My i18n block #2 with value {$interpolation} {$startTagSpan} Plain text in nested element (block #2) {$closeTagSpan}", {
- "interpolation": "\uFFFD0\uFFFD",
- "startTagSpan": "\uFFFD#7\uFFFD",
- "closeTagSpan": "\uFFFD/#7\uFFFD"
- });
+ var $I18N_1$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_4782264005467235841$$APP_SPEC_TS_1$ = goog.getMsg("Span title {$interpolation} and {$interpolation_1}", {
+ "interpolation": "\uFFFD0\uFFFD",
+ "interpolation_1": "\uFFFD1\uFFFD"
+ });
+ $I18N_1$ = $MSG_EXTERNAL_4782264005467235841$$APP_SPEC_TS_1$;
+ }
+ else {
+ $I18N_1$ = $r3$.Δi18nLocalize("Span title {$interpolation} and {$interpolation_1}", {
+ "interpolation": "\uFFFD0\uFFFD",
+ "interpolation_1": "\uFFFD1\uFFFD"
+ });
+ }
+ const $_c2$ = ["title", $I18N_1$];
+ var $I18N_0$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_4446430594603971069$$APP_SPEC_TS_0$ = goog.getMsg(" My i18n block #1 with value: {$interpolation} {$startTagSpan} Plain text in nested element (block #1) {$closeTagSpan}", {
+ "interpolation": "\uFFFD0\uFFFD",
+ "startTagSpan": "\uFFFD#2\uFFFD",
+ "closeTagSpan": "\uFFFD/#2\uFFFD"
+ });
+ $I18N_0$ = $MSG_EXTERNAL_4446430594603971069$$APP_SPEC_TS_0$;
+ }
+ else {
+ $I18N_0$ = $r3$.Δi18nLocalize(" My i18n block #1 with value: {$interpolation} {$startTagSpan} Plain text in nested element (block #1) {$closeTagSpan}", {
+ "interpolation": "\uFFFD0\uFFFD",
+ "startTagSpan": "\uFFFD#2\uFFFD",
+ "closeTagSpan": "\uFFFD/#2\uFFFD"
+ });
+ }
+ var $I18N_4$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_2719594642740200058$$APP_SPEC_TS_4$ = goog.getMsg("Span title {$interpolation}", {
+ "interpolation": "\uFFFD0\uFFFD"
+ });
+ $I18N_4$ = $MSG_EXTERNAL_2719594642740200058$$APP_SPEC_TS_4$;
+ }
+ else {
+ $I18N_4$ = $r3$.Δi18nLocalize("Span title {$interpolation}", {
+ "interpolation": "\uFFFD0\uFFFD"
+ });
+ }
+ const $_c5$ = ["title", $I18N_4$];
+ var $I18N_3$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_2778714953278357902$$APP_SPEC_TS_3$ = goog.getMsg(" My i18n block #2 with value {$interpolation} {$startTagSpan} Plain text in nested element (block #2) {$closeTagSpan}", {
+ "interpolation": "\uFFFD0\uFFFD",
+ "startTagSpan": "\uFFFD#7\uFFFD",
+ "closeTagSpan": "\uFFFD/#7\uFFFD"
+ });
+ $I18N_3$ = $MSG_EXTERNAL_2778714953278357902$$APP_SPEC_TS_3$;
+ }
+ else {
+ $I18N_3$ = $r3$.Δi18nLocalize(" My i18n block #2 with value {$interpolation} {$startTagSpan} Plain text in nested element (block #2) {$closeTagSpan}", {
+ "interpolation": "\uFFFD0\uFFFD",
+ "startTagSpan": "\uFFFD#7\uFFFD",
+ "closeTagSpan": "\uFFFD/#7\uFFFD"
+ });
+ }
…
consts: 9,
vars: 7,
template: function MyComponent_Template(rf, ctx) {
if (rf & 1) {
$r3$.ΔelementStart(0, "div");
- $r3$.Δi18nStart(1, $MSG_EXTERNAL_4446430594603971069$$APP_SPEC_TS_0$);
+ $r3$.Δi18nStart(1, $I18N_0$);
$r3$.ΔelementStart(2, "span");
- $r3$.Δi18nAttributes(3, $_c0$);
+ $r3$.Δi18nAttributes(3, $_c2$);
$r3$.ΔelementEnd();
$r3$.Δi18nEnd();
$r3$.ΔelementEnd();
$r3$.ΔelementStart(4, "div");
- $r3$.Δi18nStart(5, $MSG_EXTERNAL_2778714953278357902$$APP_SPEC_TS_3$);
+ $r3$.Δi18nStart(5, $I18N_3$);
$r3$.Δpipe(6, "uppercase");
$r3$.ΔelementStart(7, "span");
- $r3$.Δi18nAttributes(8, $_c1$);
+ $r3$.Δi18nAttributes(8, $_c5$);
$r3$.ΔelementEnd();
$r3$.Δi18nEnd();
$r3$.ΔelementEnd();
@@ -1017,18 +1365,30 @@ describe('i18n support in the view compiler', () => {
const output = String.raw `
const $_c0$ = [${AttributeMarker.Template}, "ngIf"];
- const $MSG_EXTERNAL_7679414751795588050$$APP_SPEC_TS__1$ = goog.getMsg(" Some other content {$interpolation} {$startTagDiv} More nested levels with bindings {$interpolation_1} {$closeTagDiv}", {
- "interpolation": "\uFFFD0\uFFFD",
- "startTagDiv": "\uFFFD#3\uFFFD",
- "interpolation_1": "\uFFFD1\uFFFD",
- "closeTagDiv": "\uFFFD/#3\uFFFD"
- });
+ var $I18N_1$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_7679414751795588050$$APP_SPEC_TS__1$ = goog.getMsg(" Some other content {$interpolation} {$startTagDiv} More nested levels with bindings {$interpolation_1} {$closeTagDiv}", {
+ "interpolation": "\uFFFD0\uFFFD",
+ "startTagDiv": "\uFFFD#3\uFFFD",
+ "interpolation_1": "\uFFFD1\uFFFD",
+ "closeTagDiv": "\uFFFD/#3\uFFFD"
+ });
+ $I18N_1$ = $MSG_EXTERNAL_7679414751795588050$$APP_SPEC_TS__1$;
+ }
+ else {
+ $I18N_1$ = $r3$.Δi18nLocalize(" Some other content {$interpolation} {$startTagDiv} More nested levels with bindings {$interpolation_1} {$closeTagDiv}", {
+ "interpolation": "\uFFFD0\uFFFD",
+ "startTagDiv": "\uFFFD#3\uFFFD",
+ "interpolation_1": "\uFFFD1\uFFFD",
+ "closeTagDiv": "\uFFFD/#3\uFFFD"
+ });
+ }
…
function MyComponent_div_2_Template(rf, ctx) {
if (rf & 1) {
$r3$.ΔelementStart(0, "div");
$r3$.ΔelementStart(1, "div");
- $r3$.Δi18nStart(2, $MSG_EXTERNAL_7679414751795588050$$APP_SPEC_TS__1$);
+ $r3$.Δi18nStart(2, $I18N_1$);
$r3$.Δelement(3, "div");
$r3$.Δpipe(4, "uppercase");
$r3$.Δi18nEnd();
@@ -1079,10 +1439,19 @@ describe('i18n support in the view compiler', () => {
$r3$.Δelement(0, "img", $_c0$);
}
}
- const $MSG_EXTERNAL_2367729185105559721$ = goog.getMsg("App logo #{$interpolation}", {
- "interpolation": "\uFFFD0\uFFFD"
- });
- const $_c3$ = ["title", $MSG_EXTERNAL_2367729185105559721$];
+ var $I18N_2$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_2367729185105559721$$APP_SPEC_TS__2$ = goog.getMsg("App logo #{$interpolation}", {
+ "interpolation": "\uFFFD0\uFFFD"
+ });
+ $I18N_2$ = $MSG_EXTERNAL_2367729185105559721$$APP_SPEC_TS__2$;
+ }
+ else {
+ $I18N_2$ = $r3$.Δi18nLocalize("App logo #{$interpolation}", {
+ "interpolation": "\uFFFD0\uFFFD"
+ });
+ }
+ const $_c3$ = ["title", $I18N_2$];
function MyComponent_img_2_Template(rf, ctx) {
if (rf & 1) {
$r3$.ΔelementStart(0, "img", $_c0$);
@@ -1146,7 +1515,7 @@ describe('i18n support in the view compiler', () => {
const $_c0$ = [${AttributeMarker.Template}, "ngIf"];
function MyComponent_div_2_div_4_Template(rf, ctx) {
if (rf & 1) {
- $r3$.Δi18nStart(0, $I18N_EXTERNAL_1221890473527419724$$APP_SPEC_TS_0$, 2);
+ $r3$.Δi18nStart(0, $I18N_0$, 2);
$r3$.ΔelementStart(1, "div");
$r3$.Δelement(2, "div");
$r3$.ΔelementEnd();
@@ -1162,7 +1531,7 @@ describe('i18n support in the view compiler', () => {
}
function MyComponent_div_2_Template(rf, ctx) {
if (rf & 1) {
- $r3$.Δi18nStart(0, $I18N_EXTERNAL_1221890473527419724$$APP_SPEC_TS_0$, 1);
+ $r3$.Δi18nStart(0, $I18N_0$, 1);
$r3$.ΔelementStart(1, "div");
$r3$.ΔelementStart(2, "div");
$r3$.Δpipe(3, "uppercase");
@@ -1180,23 +1549,42 @@ describe('i18n support in the view compiler', () => {
$r3$.Δi18nApply(0);
}
}
- const $MSG_EXTERNAL_1221890473527419724$$APP_SPEC_TS_0$ = goog.getMsg(" Some content {$startTagDiv_2} Some other content {$interpolation} {$startTagDiv} More nested levels with bindings {$interpolation_1} {$startTagDiv_1} Content inside sub-template {$interpolation_2} {$startTagDiv} Bottom level element {$interpolation_3} {$closeTagDiv}{$closeTagDiv}{$closeTagDiv}{$closeTagDiv}{$startTagDiv_3} Some other content {$interpolation_4} {$startTagDiv} More nested levels with bindings {$interpolation_5} {$closeTagDiv}{$closeTagDiv}", {
- "startTagDiv_2": "\uFFFD*2:1\uFFFD\uFFFD#1:1\uFFFD",
- "closeTagDiv": "[\uFFFD/#2:2\uFFFD|\uFFFD/#1:2\uFFFD\uFFFD/*4:2\uFFFD|\uFFFD/#2:1\uFFFD|\uFFFD/#1:1\uFFFD\uFFFD/*2:1\uFFFD|\uFFFD/#2:3\uFFFD|\uFFFD/#1:3\uFFFD\uFFFD/*3:3\uFFFD]",
- "startTagDiv_3": "\uFFFD*3:3\uFFFD\uFFFD#1:3\uFFFD",
- "interpolation": "\uFFFD0:1\uFFFD",
- "startTagDiv": "[\uFFFD#2:1\uFFFD|\uFFFD#2:2\uFFFD|\uFFFD#2:3\uFFFD]",
- "interpolation_1": "\uFFFD1:1\uFFFD",
- "startTagDiv_1": "\uFFFD*4:2\uFFFD\uFFFD#1:2\uFFFD",
- "interpolation_2": "\uFFFD0:2\uFFFD",
- "interpolation_3": "\uFFFD1:2\uFFFD",
- "interpolation_4": "\uFFFD0:3\uFFFD",
- "interpolation_5": "\uFFFD1:3\uFFFD"
- });
- const $I18N_EXTERNAL_1221890473527419724$$APP_SPEC_TS_0$ = $r3$.Δi18nPostprocess($MSG_EXTERNAL_1221890473527419724$$APP_SPEC_TS_0$);
+ var $I18N_0$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_1221890473527419724$$APP_SPEC_TS_0$ = goog.getMsg(" Some content {$startTagDiv_2} Some other content {$interpolation} {$startTagDiv} More nested levels with bindings {$interpolation_1} {$startTagDiv_1} Content inside sub-template {$interpolation_2} {$startTagDiv} Bottom level element {$interpolation_3} {$closeTagDiv}{$closeTagDiv}{$closeTagDiv}{$closeTagDiv}{$startTagDiv_3} Some other content {$interpolation_4} {$startTagDiv} More nested levels with bindings {$interpolation_5} {$closeTagDiv}{$closeTagDiv}", {
+ "startTagDiv_2": "\uFFFD*2:1\uFFFD\uFFFD#1:1\uFFFD",
+ "closeTagDiv": "[\uFFFD/#2:2\uFFFD|\uFFFD/#1:2\uFFFD\uFFFD/*4:2\uFFFD|\uFFFD/#2:1\uFFFD|\uFFFD/#1:1\uFFFD\uFFFD/*2:1\uFFFD|\uFFFD/#2:3\uFFFD|\uFFFD/#1:3\uFFFD\uFFFD/*3:3\uFFFD]",
+ "startTagDiv_3": "\uFFFD*3:3\uFFFD\uFFFD#1:3\uFFFD",
+ "interpolation": "\uFFFD0:1\uFFFD",
+ "startTagDiv": "[\uFFFD#2:1\uFFFD|\uFFFD#2:2\uFFFD|\uFFFD#2:3\uFFFD]",
+ "interpolation_1": "\uFFFD1:1\uFFFD",
+ "startTagDiv_1": "\uFFFD*4:2\uFFFD\uFFFD#1:2\uFFFD",
+ "interpolation_2": "\uFFFD0:2\uFFFD",
+ "interpolation_3": "\uFFFD1:2\uFFFD",
+ "interpolation_4": "\uFFFD0:3\uFFFD",
+ "interpolation_5": "\uFFFD1:3\uFFFD"
+ });
+ $I18N_0$ = $MSG_EXTERNAL_1221890473527419724$$APP_SPEC_TS_0$;
+ }
+ else {
+ $I18N_0$ = $r3$.Δi18nLocalize(" Some content {$startTagDiv_2} Some other content {$interpolation} {$startTagDiv} More nested levels with bindings {$interpolation_1} {$startTagDiv_1} Content inside sub-template {$interpolation_2} {$startTagDiv} Bottom level element {$interpolation_3} {$closeTagDiv}{$closeTagDiv}{$closeTagDiv}{$closeTagDiv}{$startTagDiv_3} Some other content {$interpolation_4} {$startTagDiv} More nested levels with bindings {$interpolation_5} {$closeTagDiv}{$closeTagDiv}", {
+ "startTagDiv_2": "\uFFFD*2:1\uFFFD\uFFFD#1:1\uFFFD",
+ "closeTagDiv": "[\uFFFD/#2:2\uFFFD|\uFFFD/#1:2\uFFFD\uFFFD/*4:2\uFFFD|\uFFFD/#2:1\uFFFD|\uFFFD/#1:1\uFFFD\uFFFD/*2:1\uFFFD|\uFFFD/#2:3\uFFFD|\uFFFD/#1:3\uFFFD\uFFFD/*3:3\uFFFD]",
+ "startTagDiv_3": "\uFFFD*3:3\uFFFD\uFFFD#1:3\uFFFD",
+ "interpolation": "\uFFFD0:1\uFFFD",
+ "startTagDiv": "[\uFFFD#2:1\uFFFD|\uFFFD#2:2\uFFFD|\uFFFD#2:3\uFFFD]",
+ "interpolation_1": "\uFFFD1:1\uFFFD",
+ "startTagDiv_1": "\uFFFD*4:2\uFFFD\uFFFD#1:2\uFFFD",
+ "interpolation_2": "\uFFFD0:2\uFFFD",
+ "interpolation_3": "\uFFFD1:2\uFFFD",
+ "interpolation_4": "\uFFFD0:3\uFFFD",
+ "interpolation_5": "\uFFFD1:3\uFFFD"
+ });
+ }
+ $I18N_0$ = $r3$.Δi18nPostprocess($I18N_0$);
function MyComponent_div_3_Template(rf, ctx) {
if (rf & 1) {
- $r3$.Δi18nStart(0, $I18N_EXTERNAL_1221890473527419724$$APP_SPEC_TS_0$, 3);
+ $r3$.Δi18nStart(0, $I18N_0$, 3);
$r3$.ΔelementStart(1, "div");
$r3$.Δelement(2, "div");
$r3$.Δpipe(3, "uppercase");
@@ -1217,7 +1605,7 @@ describe('i18n support in the view compiler', () => {
template: function MyComponent_Template(rf, ctx) {
if (rf & 1) {
$r3$.ΔelementStart(0, "div");
- $r3$.Δi18nStart(1, $I18N_EXTERNAL_1221890473527419724$$APP_SPEC_TS_0$);
+ $r3$.Δi18nStart(1, $I18N_0$);
$r3$.Δtemplate(2, MyComponent_div_2_Template, 5, 5, "div", $_c1$);
$r3$.Δtemplate(3, MyComponent_div_3_Template, 4, 4, "div", $_c1$);
$r3$.Δi18nEnd();
@@ -1242,16 +1630,27 @@ describe('i18n support in the view compiler', () => {
const output = String.raw `
const $_c0$ = [${AttributeMarker.Template}, "ngIf"];
- const $MSG_EXTERNAL_119975189388320493$$APP_SPEC_TS__1$ = goog.getMsg("Some other content {$startTagSpan}{$interpolation}{$closeTagSpan}", {
- "startTagSpan": "\uFFFD#2\uFFFD",
- "interpolation": "\uFFFD0\uFFFD",
- "closeTagSpan": "\uFFFD/#2\uFFFD"
- });
+ var $I18N_1$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_119975189388320493$$APP_SPEC_TS__1$ = goog.getMsg("Some other content {$startTagSpan}{$interpolation}{$closeTagSpan}", {
+ "startTagSpan": "\uFFFD#2\uFFFD",
+ "interpolation": "\uFFFD0\uFFFD",
+ "closeTagSpan": "\uFFFD/#2\uFFFD"
+ });
+ $I18N_1$ = $MSG_EXTERNAL_119975189388320493$$APP_SPEC_TS__1$;
+ }
+ else {
+ $I18N_1$ = $r3$.Δi18nLocalize("Some other content {$startTagSpan}{$interpolation}{$closeTagSpan}", {
+ "startTagSpan": "\uFFFD#2\uFFFD",
+ "interpolation": "\uFFFD0\uFFFD",
+ "closeTagSpan": "\uFFFD/#2\uFFFD"
+ });
+ }
…
function MyComponent_div_0_Template(rf, ctx) {
if (rf & 1) {
$r3$.ΔelementStart(0, "div");
- $r3$.Δi18nStart(1, $MSG_EXTERNAL_119975189388320493$$APP_SPEC_TS__1$);
+ $r3$.Δi18nStart(1, $I18N_1$);
$r3$.Δelement(2, "span");
$r3$.Δi18nEnd();
$r3$.ΔelementEnd();
@@ -1287,13 +1686,20 @@ describe('i18n support in the view compiler', () => {
const output = String.raw `
const $_c0$ = [${AttributeMarker.Bindings}, "click"];
- const $MSG_EXTERNAL_3902961887793684628$$APP_SPEC_TS_1$ = goog.getMsg("Hello");
+ var $I18N_1$;
+ if (ngI18nClosureMode) {
+ const $MSG_APP_SPEC_TS_2$ = goog.getMsg("Hello");
+ $I18N_1$ = $MSG_APP_SPEC_TS_2$;
+ }
+ else {
+ $I18N_1$ = $r3$.Δi18nLocalize("Hello");
+ }
…
template: function MyComponent_Template(rf, ctx) {
if (rf & 1) {
$r3$.ΔelementStart(0, "div", $_c0$);
$r3$.Δlistener("click", function MyComponent_Template_div_click_0_listener($event) { return ctx.onClick(); });
- $r3$.Δi18n(1, $MSG_EXTERNAL_3902961887793684628$$APP_SPEC_TS_1$);
+ $r3$.Δi18n(1, $I18N_1$);
$r3$.ΔelementEnd();
}
}
@@ -1310,12 +1716,19 @@ describe('i18n support in the view compiler', () => {
`;
const output = String.raw `
- const $MSG_EXTERNAL_4890179241114413722$$APP_SPEC_TS_0$ = goog.getMsg("My i18n block #1");
+ var $I18N_0$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_4890179241114413722$$APP_SPEC_TS_0$ = goog.getMsg("My i18n block #1");
+ $I18N_0$ = $MSG_EXTERNAL_4890179241114413722$$APP_SPEC_TS_0$;
+ }
+ else {
+ $I18N_0$ = $r3$.Δi18nLocalize("My i18n block #1");
+ }
…
template: function MyComponent_Template(rf, ctx) {
if (rf & 1) {
$r3$.ΔelementStart(0, "div");
- $r3$.Δi18n(1, $MSG_EXTERNAL_4890179241114413722$$APP_SPEC_TS_0$);
+ $r3$.Δi18n(1, $I18N_0$);
$r3$.ΔelementEnd();
}
}
@@ -1330,8 +1743,15 @@ describe('i18n support in the view compiler', () => {
`;
const output = String.raw `
- const $MSG_EXTERNAL_8806993169187953163$$APP_SPEC_TS_0$ = goog.getMsg("{VAR_SELECT, select, 10 {ten} 20 {twenty} other {other}}");
- const $I18N_EXTERNAL_8806993169187953163$$APP_SPEC_TS_0$ = $r3$.Δi18nPostprocess($MSG_EXTERNAL_8806993169187953163$$APP_SPEC_TS_0$, {
+ var $I18N_0$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_8806993169187953163$$APP_SPEC_TS_0$ = goog.getMsg("{VAR_SELECT, select, 10 {ten} 20 {twenty} other {other}}");
+ $I18N_0$ = $MSG_EXTERNAL_8806993169187953163$$APP_SPEC_TS_0$;
+ }
+ else {
+ $I18N_0$ = $r3$.Δi18nLocalize("{VAR_SELECT, select, 10 {ten} 20 {twenty} other {other}}");
+ }
+ $I18N_0$ = $r3$.Δi18nPostprocess($I18N_0$, {
"VAR_SELECT": "\uFFFD0\uFFFD"
});
…
@@ -1340,7 +1760,7 @@ describe('i18n support in the view compiler', () => {
template: function MyComponent_Template(rf, ctx) {
if (rf & 1) {
$r3$.ΔelementStart(0, "div");
- $r3$.Δi18n(1, $I18N_EXTERNAL_8806993169187953163$$APP_SPEC_TS_0$);
+ $r3$.Δi18n(1, $I18N_0$);
$r3$.ΔelementEnd();
}
if (rf & 2) {
@@ -1361,11 +1781,25 @@ describe('i18n support in the view compiler', () => {
`;
const output = String.raw `
- const $MSG_EXTERNAL_2413150872298537152$$APP_SPEC_TS_0$ = goog.getMsg("My i18n block #2");
- const $MSG_EXTERNAL_4890179241114413722$$APP_SPEC_TS__1$ = goog.getMsg("My i18n block #1");
+ var $I18N_0$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_2413150872298537152$$APP_SPEC_TS_0$ = goog.getMsg("My i18n block #2");
+ $I18N_0$ = $MSG_EXTERNAL_2413150872298537152$$APP_SPEC_TS_0$;
+ }
+ else {
+ $I18N_0$ = $r3$.Δi18nLocalize("My i18n block #2");
+ }
+ var $I18N_1$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_4890179241114413722$$APP_SPEC_TS__1$ = goog.getMsg("My i18n block #1");
+ $I18N_1$ = $MSG_EXTERNAL_4890179241114413722$$APP_SPEC_TS__1$;
+ }
+ else {
+ $I18N_1$ = $r3$.Δi18nLocalize("My i18n block #1");
+ }
function MyComponent_ng_template_0_Template(rf, ctx) {
if (rf & 1) {
- $r3$.Δi18n(0, $MSG_EXTERNAL_4890179241114413722$$APP_SPEC_TS__1$);
+ $r3$.Δi18n(0, $I18N_1$);
}
}
…
@@ -1373,7 +1807,7 @@ describe('i18n support in the view compiler', () => {
if (rf & 1) {
$r3$.Δtemplate(0, MyComponent_ng_template_0_Template, 1, 0, "ng-template");
$r3$.ΔelementContainerStart(1);
- $r3$.Δi18n(2, $MSG_EXTERNAL_2413150872298537152$$APP_SPEC_TS_0$);
+ $r3$.Δi18n(2, $I18N_0$);
$r3$.ΔelementContainerEnd();
}
}
@@ -1390,19 +1824,33 @@ describe('i18n support in the view compiler', () => {
const output = String.raw `
const $_c0$ = [${AttributeMarker.Classes}, "myClass"];
- const $MSG_EXTERNAL_5295701706185791735$$APP_SPEC_TS_0$ = goog.getMsg("Text #1");
- const $_c1$ = [${AttributeMarker.Styles}, "padding", "10px"];
- const $MSG_EXTERNAL_4722270221386399294$$APP_SPEC_TS_2$ = goog.getMsg("Text #2");
+ var $I18N_1$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_5295701706185791735$$APP_SPEC_TS_1$ = goog.getMsg("Text #1");
+ $I18N_1$ = $MSG_EXTERNAL_5295701706185791735$$APP_SPEC_TS_1$;
+ }
+ else {
+ $I18N_1$ = $r3$.Δi18nLocalize("Text #1");
+ }
+ const $_c2$ = [${AttributeMarker.Styles}, "padding", "10px"];
+ var $I18N_3$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_4722270221386399294$$APP_SPEC_TS_3$ = goog.getMsg("Text #2");
+ $I18N_3$ = $MSG_EXTERNAL_4722270221386399294$$APP_SPEC_TS_3$;
+ }
+ else {
+ $I18N_3$ = $r3$.Δi18nLocalize("Text #2");
+ }
…
consts: 4,
vars: 0,
template: function MyComponent_Template(rf, ctx) {
if (rf & 1) {
$r3$.ΔelementStart(0, "span", $_c0$);
- $r3$.Δi18n(1, $MSG_EXTERNAL_5295701706185791735$$APP_SPEC_TS_0$);
+ $r3$.Δi18n(1, $I18N_1$);
$r3$.ΔelementEnd();
$r3$.ΔelementStart(2, "span", $_c1$);
- $r3$.Δi18n(3, $MSG_EXTERNAL_4722270221386399294$$APP_SPEC_TS_2$);
+ $r3$.Δi18n(3, $I18N_3$);
$r3$.ΔelementEnd();
}
}
@@ -1419,16 +1867,25 @@ describe('i18n support in the view compiler', () => {
`;
const output = String.raw `
- const $MSG_EXTERNAL_355394464191978948$$APP_SPEC_TS_0$ = goog.getMsg("Some content: {$interpolation}", {
- "interpolation": "\uFFFD0\uFFFD"
- });
+ var $I18N_0$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_355394464191978948$$APP_SPEC_TS_0$ = goog.getMsg("Some content: {$interpolation}", {
+ "interpolation": "\uFFFD0\uFFFD"
+ });
+ $I18N_0$ = $MSG_EXTERNAL_355394464191978948$$APP_SPEC_TS_0$;
+ }
+ else {
+ $I18N_0$ = $r3$.Δi18nLocalize("Some content: {$interpolation}", {
+ "interpolation": "\uFFFD0\uFFFD"
+ });
+ }
…
consts: 3,
vars: 3,
template: function MyComponent_Template(rf, ctx) {
if (rf & 1) {
$r3$.ΔelementContainerStart(0);
- $r3$.Δi18n(1, $MSG_EXTERNAL_355394464191978948$$APP_SPEC_TS_0$);
+ $r3$.Δi18n(1, $I18N_0$);
$r3$.Δpipe(2, "uppercase");
$r3$.ΔelementContainerEnd();
}
@@ -1449,12 +1906,21 @@ describe('i18n support in the view compiler', () => {
`;
const output = String.raw `
- const $MSG_EXTERNAL_355394464191978948$$APP_SPEC_TS__0$ = goog.getMsg("Some content: {$interpolation}", {
- "interpolation": "\uFFFD0\uFFFD"
- });
+ var $I18N_0$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_355394464191978948$$APP_SPEC_TS__0$ = goog.getMsg("Some content: {$interpolation}", {
+ "interpolation": "\uFFFD0\uFFFD"
+ });
+ $I18N_0$ = $MSG_EXTERNAL_355394464191978948$$APP_SPEC_TS__0$;
+ }
+ else {
+ $I18N_0$ = $r3$.Δi18nLocalize("Some content: {$interpolation}", {
+ "interpolation": "\uFFFD0\uFFFD"
+ });
+ }
function MyComponent_ng_template_0_Template(rf, ctx) {
if (rf & 1) {
- $r3$.Δi18n(0, $MSG_EXTERNAL_355394464191978948$$APP_SPEC_TS__0$);
+ $r3$.Δi18n(0, $I18N_0$);
$r3$.Δpipe(1, "uppercase");
} if (rf & 2) {
const $ctx_r0$ = $r3$.ΔnextContext();
@@ -1485,17 +1951,31 @@ describe('i18n support in the view compiler', () => {
`;
const output = String.raw `
- const $MSG_EXTERNAL_702706566400598764$$APP_SPEC_TS_0$ = goog.getMsg("{$startTagNgTemplate}Template content: {$interpolation}{$closeTagNgTemplate}{$startTagNgContainer}Container content: {$interpolation_1}{$closeTagNgContainer}", {
- "startTagNgTemplate": "\uFFFD*2:1\uFFFD",
- "closeTagNgTemplate": "\uFFFD/*2:1\uFFFD",
- "startTagNgContainer": "\uFFFD#3\uFFFD",
- "interpolation_1": "\uFFFD0\uFFFD",
- "closeTagNgContainer": "\uFFFD/#3\uFFFD",
- "interpolation": "\uFFFD0:1\uFFFD"
- });
+ var $I18N_0$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_702706566400598764$$APP_SPEC_TS_0$ = goog.getMsg("{$startTagNgTemplate}Template content: {$interpolation}{$closeTagNgTemplate}{$startTagNgContainer}Container content: {$interpolation_1}{$closeTagNgContainer}", {
+ "startTagNgTemplate": "\uFFFD*2:1\uFFFD",
+ "closeTagNgTemplate": "\uFFFD/*2:1\uFFFD",
+ "startTagNgContainer": "\uFFFD#3\uFFFD",
+ "interpolation_1": "\uFFFD0\uFFFD",
+ "closeTagNgContainer": "\uFFFD/#3\uFFFD",
+ "interpolation": "\uFFFD0:1\uFFFD"
+ });
+ $I18N_0$ = $MSG_EXTERNAL_702706566400598764$$APP_SPEC_TS_0$;
+ }
+ else {
+ $I18N_0$ = $r3$.Δi18nLocalize("{$startTagNgTemplate}Template content: {$interpolation}{$closeTagNgTemplate}{$startTagNgContainer}Container content: {$interpolation_1}{$closeTagNgContainer}", {
+ "startTagNgTemplate": "\uFFFD*2:1\uFFFD",
+ "closeTagNgTemplate": "\uFFFD/*2:1\uFFFD",
+ "startTagNgContainer": "\uFFFD#3\uFFFD",
+ "interpolation_1": "\uFFFD0\uFFFD",
+ "closeTagNgContainer": "\uFFFD/#3\uFFFD",
+ "interpolation": "\uFFFD0:1\uFFFD"
+ });
+ }
function MyComponent_ng_template_2_Template(rf, ctx) {
if (rf & 1) {
- $r3$.Δi18n(0, $MSG_EXTERNAL_702706566400598764$$APP_SPEC_TS_0$, 1);
+ $r3$.Δi18n(0, $I18N_0$, 1);
$r3$.Δpipe(1, "uppercase");
}
if (rf & 2) {
@@ -1511,7 +1991,7 @@ describe('i18n support in the view compiler', () => {
template: function MyComponent_Template(rf, ctx) {
if (rf & 1) {
$r3$.ΔelementStart(0, "div");
- $r3$.Δi18nStart(1, $MSG_EXTERNAL_702706566400598764$$APP_SPEC_TS_0$);
+ $r3$.Δi18nStart(1, $I18N_0$);
$r3$.Δtemplate(2, MyComponent_ng_template_2_Template, 2, 3, "ng-template");
$r3$.ΔelementContainerStart(3);
$r3$.Δpipe(4, "uppercase");
@@ -1537,17 +2017,31 @@ describe('i18n support in the view compiler', () => {
`;
const output = String.raw `
- const $MSG_EXTERNAL_8806993169187953163$$APP_SPEC_TS_0$ = goog.getMsg("{VAR_SELECT, select, 10 {ten} 20 {twenty} other {other}}");
- const $I18N_EXTERNAL_8806993169187953163$$APP_SPEC_TS_0$ = $r3$.Δi18nPostprocess($MSG_EXTERNAL_8806993169187953163$$APP_SPEC_TS_0$, {
+ var $I18N_0$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_8806993169187953163$$APP_SPEC_TS_0$ = goog.getMsg("{VAR_SELECT, select, 10 {ten} 20 {twenty} other {other}}");
+ $I18N_0$ = $MSG_EXTERNAL_8806993169187953163$$APP_SPEC_TS_0$;
+ }
+ else {
+ $I18N_0$ = $r3$.Δi18nLocalize("{VAR_SELECT, select, 10 {ten} 20 {twenty} other {other}}");
+ }
+ $I18N_0$ = $r3$.Δi18nPostprocess($I18N_0$, {
"VAR_SELECT": "\uFFFD0\uFFFD"
});
- const $MSG_EXTERNAL_7842238767399919809$$APP_SPEC_TS__1$ = goog.getMsg("{VAR_SELECT, select, male {male} female {female} other {other}}");
- const $I18N_EXTERNAL_7842238767399919809$$APP_SPEC_TS__1$ = $r3$.Δi18nPostprocess($MSG_EXTERNAL_7842238767399919809$$APP_SPEC_TS__1$, {
+ var $I18N_1$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_7842238767399919809$$APP_SPEC_TS__1$ = goog.getMsg("{VAR_SELECT, select, male {male} female {female} other {other}}");
+ $I18N_1$ = $MSG_EXTERNAL_7842238767399919809$$APP_SPEC_TS__1$;
+ }
+ else {
+ $I18N_1$ = $r3$.Δi18nLocalize("{VAR_SELECT, select, male {male} female {female} other {other}}");
+ }
+ $I18N_1$ = $r3$.Δi18nPostprocess($I18N_1$, {
"VAR_SELECT": "\uFFFD0\uFFFD"
});
function MyComponent_ng_template_0_Template(rf, ctx) {
if (rf & 1) {
- $r3$.Δi18n(0, $I18N_EXTERNAL_7842238767399919809$$APP_SPEC_TS__1$);
+ $r3$.Δi18n(0, $I18N_1$);
}
if (rf & 2) {
const $ctx_r0$ = $r3$.ΔnextContext();
@@ -1563,7 +2057,7 @@ describe('i18n support in the view compiler', () => {
if (rf & 1) {
$r3$.Δtemplate(0, MyComponent_ng_template_0_Template, 1, 1, "ng-template");
$r3$.ΔelementContainerStart(1);
- $r3$.Δi18n(2, $I18N_EXTERNAL_8806993169187953163$$APP_SPEC_TS_0$);
+ $r3$.Δi18n(2, $I18N_0$);
$r3$.ΔelementContainerEnd();
}
if (rf & 2) {
@@ -1595,7 +2089,7 @@ describe('i18n support in the view compiler', () => {
const output = String.raw `
function MyComponent_ng_template_2_ng_template_2_ng_template_1_Template(rf, ctx) {
if (rf & 1) {
- $r3$.Δi18n(0, $I18N_EXTERNAL_2051477021417799640$$APP_SPEC_TS_0$, 3);
+ $r3$.Δi18n(0, $I18N_0$, 3);
}
if (rf & 2) {
const $ctx_r2$ = $r3$.ΔnextContext(3);
@@ -1606,7 +2100,7 @@ describe('i18n support in the view compiler', () => {
}
function MyComponent_ng_template_2_ng_template_2_Template(rf, ctx) {
if (rf & 1) {
- $r3$.Δi18nStart(0, $I18N_EXTERNAL_2051477021417799640$$APP_SPEC_TS_0$, 2);
+ $r3$.Δi18nStart(0, $I18N_0$, 2);
$r3$.Δtemplate(1, MyComponent_ng_template_2_ng_template_2_ng_template_1_Template, 1, 1, "ng-template");
$r3$.Δi18nEnd();
}
@@ -1617,17 +2111,30 @@ describe('i18n support in the view compiler', () => {
$r3$.Δi18nApply(0);
}
}
- const $MSG_EXTERNAL_2051477021417799640$$APP_SPEC_TS_0$ = goog.getMsg("{$startTagNgTemplate} Template A: {$interpolation} {$startTagNgTemplate} Template B: {$interpolation_1} {$startTagNgTemplate} Template C: {$interpolation_2} {$closeTagNgTemplate}{$closeTagNgTemplate}{$closeTagNgTemplate}", {
- "startTagNgTemplate": "[\uFFFD*2:1\uFFFD|\uFFFD*2:2\uFFFD|\uFFFD*1:3\uFFFD]",
- "closeTagNgTemplate": "[\uFFFD/*1:3\uFFFD|\uFFFD/*2:2\uFFFD|\uFFFD/*2:1\uFFFD]",
- "interpolation": "\uFFFD0:1\uFFFD",
- "interpolation_1": "\uFFFD0:2\uFFFD",
- "interpolation_2": "\uFFFD0:3\uFFFD"
- });
- const $I18N_EXTERNAL_2051477021417799640$$APP_SPEC_TS_0$ = $r3$.Δi18nPostprocess($MSG_EXTERNAL_2051477021417799640$$APP_SPEC_TS_0$);
+ var $I18N_0$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_2051477021417799640$$APP_SPEC_TS_0$ = goog.getMsg("{$startTagNgTemplate} Template A: {$interpolation} {$startTagNgTemplate} Template B: {$interpolation_1} {$startTagNgTemplate} Template C: {$interpolation_2} {$closeTagNgTemplate}{$closeTagNgTemplate}{$closeTagNgTemplate}", {
+ "startTagNgTemplate": "[\uFFFD*2:1\uFFFD|\uFFFD*2:2\uFFFD|\uFFFD*1:3\uFFFD]",
+ "closeTagNgTemplate": "[\uFFFD/*1:3\uFFFD|\uFFFD/*2:2\uFFFD|\uFFFD/*2:1\uFFFD]",
+ "interpolation": "\uFFFD0:1\uFFFD",
+ "interpolation_1": "\uFFFD0:2\uFFFD",
+ "interpolation_2": "\uFFFD0:3\uFFFD"
+ });
+ $I18N_0$ = $MSG_EXTERNAL_2051477021417799640$$APP_SPEC_TS_0$;
+ }
+ else {
+ $I18N_0$ = $r3$.Δi18nLocalize("{$startTagNgTemplate} Template A: {$interpolation} {$startTagNgTemplate} Template B: {$interpolation_1} {$startTagNgTemplate} Template C: {$interpolation_2} {$closeTagNgTemplate}{$closeTagNgTemplate}{$closeTagNgTemplate}", {
+ "startTagNgTemplate": "[\uFFFD*2:1\uFFFD|\uFFFD*2:2\uFFFD|\uFFFD*1:3\uFFFD]",
+ "closeTagNgTemplate": "[\uFFFD/*1:3\uFFFD|\uFFFD/*2:2\uFFFD|\uFFFD/*2:1\uFFFD]",
+ "interpolation": "\uFFFD0:1\uFFFD",
+ "interpolation_1": "\uFFFD0:2\uFFFD",
+ "interpolation_2": "\uFFFD0:3\uFFFD"
+ });
+ }
+ $I18N_0$ = $r3$.Δi18nPostprocess($I18N_0$);
function MyComponent_ng_template_2_Template(rf, ctx) {
if (rf & 1) {
- $r3$.Δi18nStart(0, $I18N_EXTERNAL_2051477021417799640$$APP_SPEC_TS_0$, 1);
+ $r3$.Δi18nStart(0, $I18N_0$, 1);
$r3$.Δpipe(1, "uppercase");
$r3$.Δtemplate(2, MyComponent_ng_template_2_ng_template_2_Template, 2, 1, "ng-template");
$r3$.Δi18nEnd();
@@ -1645,7 +2152,7 @@ describe('i18n support in the view compiler', () => {
template: function MyComponent_Template(rf, ctx) {
if (rf & 1) {
$r3$.ΔelementStart(0, "div");
- $r3$.Δi18nStart(1, $I18N_EXTERNAL_2051477021417799640$$APP_SPEC_TS_0$);
+ $r3$.Δi18nStart(1, $I18N_0$);
$r3$.Δtemplate(2, MyComponent_ng_template_2_Template, 3, 3, "ng-template");
$r3$.Δi18nEnd();
$r3$.ΔelementEnd();
@@ -1663,17 +2170,31 @@ describe('i18n support in the view compiler', () => {
`;
const output = String.raw `
- const $MSG_EXTERNAL_7842238767399919809$$APP_SPEC_TS_0$ = goog.getMsg("{VAR_SELECT, select, male {male} female {female} other {other}}");
- const $I18N_EXTERNAL_7842238767399919809$$APP_SPEC_TS_0$ = $r3$.Δi18nPostprocess($MSG_EXTERNAL_7842238767399919809$$APP_SPEC_TS_0$, {
+ var $I18N_0$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_7842238767399919809$$APP_SPEC_TS_0$ = goog.getMsg("{VAR_SELECT, select, male {male} female {female} other {other}}");
+ $I18N_0$ = $MSG_EXTERNAL_7842238767399919809$$APP_SPEC_TS_0$;
+ }
+ else {
+ $I18N_0$ = $r3$.Δi18nLocalize("{VAR_SELECT, select, male {male} female {female} other {other}}");
+ }
+ $I18N_0$ = $r3$.Δi18nPostprocess($I18N_0$, {
"VAR_SELECT": "\uFFFD0\uFFFD"
});
- const $MSG_EXTERNAL_8806993169187953163$$APP_SPEC_TS__1$ = goog.getMsg("{VAR_SELECT, select, 10 {ten} 20 {twenty} other {other}}");
- const $I18N_EXTERNAL_8806993169187953163$$APP_SPEC_TS__1$ = $r3$.Δi18nPostprocess($MSG_EXTERNAL_8806993169187953163$$APP_SPEC_TS__1$, {
+ var $I18N_1$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_8806993169187953163$$APP_SPEC_TS__1$ = goog.getMsg("{VAR_SELECT, select, 10 {ten} 20 {twenty} other {other}}");
+ $I18N_1$ = $MSG_EXTERNAL_8806993169187953163$$APP_SPEC_TS__1$;
+ }
+ else {
+ $I18N_1$ = $r3$.Δi18nLocalize("{VAR_SELECT, select, 10 {ten} 20 {twenty} other {other}}");
+ }
+ $I18N_1$ = $r3$.Δi18nPostprocess($I18N_1$, {
"VAR_SELECT": "\uFFFD0\uFFFD"
});
function MyComponent_ng_template_2_Template(rf, ctx) {
if (rf & 1) {
- $r3$.Δi18n(0, $I18N_EXTERNAL_8806993169187953163$$APP_SPEC_TS__1$);
+ $r3$.Δi18n(0, $I18N_1$);
}
if (rf & 2) {
const $ctx_r0$ = $r3$.ΔnextContext();
@@ -1688,7 +2209,7 @@ describe('i18n support in the view compiler', () => {
template: function MyComponent_Template(rf, ctx) {
if (rf & 1) {
$r3$.ΔelementContainerStart(0);
- $r3$.Δi18n(1, $I18N_EXTERNAL_7842238767399919809$$APP_SPEC_TS_0$);
+ $r3$.Δi18n(1, $I18N_0$);
$r3$.ΔelementContainerEnd();
$r3$.Δtemplate(2, MyComponent_ng_template_2_Template, 1, 1, "ng-template");
}
@@ -1715,15 +2236,33 @@ describe('i18n support in the view compiler', () => {
const output = String.raw `
const $_c0$ = ["src", "logo.png", "title", "Logo"];
- const $MSG_EXTERNAL_4891196282781544695$$APP_SPEC_TS_0$ = goog.getMsg("{$tagImg} is my logo #1 ", {
- "tagImg": "\uFFFD#2\uFFFD\uFFFD/#2\uFFFD"
- });
- const $MSG_EXTERNAL_461986953980355147$$APP_SPEC_TS__2$ = goog.getMsg("{$tagImg} is my logo #2 ", {
- "tagImg": "\uFFFD#1\uFFFD\uFFFD/#1\uFFFD"
- });
+ var $I18N_0$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_4891196282781544695$$APP_SPEC_TS_0$ = goog.getMsg("{$tagImg} is my logo #1 ", {
+ "tagImg": "\uFFFD#2\uFFFD\uFFFD/#2\uFFFD"
+ });
+ $I18N_0$ = $MSG_EXTERNAL_4891196282781544695$$APP_SPEC_TS_0$;
+ }
+ else {
+ $I18N_0$ = $r3$.Δi18nLocalize("{$tagImg} is my logo #1 ", {
+ "tagImg": "\uFFFD#2\uFFFD\uFFFD/#2\uFFFD"
+ });
+ }
+ var $I18N_2$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_461986953980355147$$APP_SPEC_TS__2$ = goog.getMsg("{$tagImg} is my logo #2 ", {
+ "tagImg": "\uFFFD#1\uFFFD\uFFFD/#1\uFFFD"
+ });
+ $I18N_2$ = $MSG_EXTERNAL_461986953980355147$$APP_SPEC_TS__2$;
+ }
+ else {
+ $I18N_2$ = $r3$.Δi18nLocalize("{$tagImg} is my logo #2 ", {
+ "tagImg": "\uFFFD#1\uFFFD\uFFFD/#1\uFFFD"
+ });
+ }
function MyComponent_ng_template_3_Template(rf, ctx) {
if (rf & 1) {
- $r3$.Δi18nStart(0, $MSG_EXTERNAL_461986953980355147$$APP_SPEC_TS__2$);
+ $r3$.Δi18nStart(0, $I18N_2$);
$r3$.Δelement(1, "img", $_c0$);
$r3$.Δi18nEnd();
}
@@ -1732,7 +2271,7 @@ describe('i18n support in the view compiler', () => {
template: function MyComponent_Template(rf, ctx) {
if (rf & 1) {
$r3$.ΔelementContainerStart(0);
- $r3$.Δi18nStart(1, $MSG_EXTERNAL_4891196282781544695$$APP_SPEC_TS_0$);
+ $r3$.Δi18nStart(1, $I18N_0$);
$r3$.Δelement(2, "img", $_c0$);
$r3$.Δi18nEnd();
$r3$.ΔelementContainerEnd();
@@ -1755,10 +2294,20 @@ describe('i18n support in the view compiler', () => {
`;
const output = String.raw `
- const $MSG_EXTERNAL_8537814667662432133$$APP_SPEC_TS__0$ = goog.getMsg(" Root content {$startTagNgContainer} Nested content {$closeTagNgContainer}", {
- "startTagNgContainer": "\uFFFD*1:1\uFFFD\uFFFD#1:1\uFFFD",
- "closeTagNgContainer": "\uFFFD/#1:1\uFFFD\uFFFD/*1:1\uFFFD"
- });
+ var $I18N_0$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_8537814667662432133$$APP_SPEC_TS__0$ = goog.getMsg(" Root content {$startTagNgContainer} Nested content {$closeTagNgContainer}", {
+ "startTagNgContainer": "\uFFFD*1:1\uFFFD\uFFFD#1:1\uFFFD",
+ "closeTagNgContainer": "\uFFFD/#1:1\uFFFD\uFFFD/*1:1\uFFFD"
+ });
+ $I18N_0$ = $MSG_EXTERNAL_8537814667662432133$$APP_SPEC_TS__0$;
+ }
+ else {
+ $I18N_0$ = $r3$.Δi18nLocalize(" Root content {$startTagNgContainer} Nested content {$closeTagNgContainer}", {
+ "startTagNgContainer": "\uFFFD*1:1\uFFFD\uFFFD#1:1\uFFFD",
+ "closeTagNgContainer": "\uFFFD/#1:1\uFFFD\uFFFD/*1:1\uFFFD"
+ });
+ }
…
`;
@@ -1775,8 +2324,22 @@ describe('i18n support in the view compiler', () => {
// contain the same content. This should be optimized by translation statements caching, that
// can be implemented in the future within FW-635.
const output = String.raw `
- const $MSG_EXTERNAL_6563391987554512024$$APP_SPEC_TS_0$ = goog.getMsg("Test");
- const $MSG_EXTERNAL_6563391987554512024$$APP_SPEC_TS_1$ = goog.getMsg("Test");
+ var $I18N_0$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_6563391987554512024$$APP_SPEC_TS_0$ = goog.getMsg("Test");
+ $I18N_0$ = $MSG_EXTERNAL_6563391987554512024$$APP_SPEC_TS_0$;
+ }
+ else {
+ $I18N_0$ = $r3$.Δi18nLocalize("Test");
+ }
+ var $I18N_1$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_6563391987554512024$$APP_SPEC_TS_1$ = goog.getMsg("Test");
+ $I18N_1$ = $MSG_EXTERNAL_6563391987554512024$$APP_SPEC_TS_1$;
+ }
+ else {
+ $I18N_1$ = $r3$.Δi18nLocalize("Test");
+ }
…
`;
@@ -1794,16 +2357,26 @@ describe('i18n support in the view compiler', () => {
`;
const output = String.raw `
- const $MSG_EXTERNAL_963542717423364282$$APP_SPEC_TS_0$ = goog.getMsg("\n Some text\n {$startTagSpan}Text inside span{$closeTagSpan}\n ", {
- "startTagSpan": "\uFFFD#3\uFFFD",
- "closeTagSpan": "\uFFFD/#3\uFFFD"
- });
+ var $I18N_0$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_963542717423364282$$APP_SPEC_TS_0$ = goog.getMsg("\n Some text\n {$startTagSpan}Text inside span{$closeTagSpan}\n ", {
+ "startTagSpan": "\uFFFD#3\uFFFD",
+ "closeTagSpan": "\uFFFD/#3\uFFFD"
+ });
+ $I18N_0$ = $MSG_EXTERNAL_963542717423364282$$APP_SPEC_TS_0$;
+ }
+ else {
+ $I18N_0$ = $r3$.Δi18nLocalize("\n Some text\n {$startTagSpan}Text inside span{$closeTagSpan}\n ", {
+ "startTagSpan": "\uFFFD#3\uFFFD",
+ "closeTagSpan": "\uFFFD/#3\uFFFD"
+ });
+ }
…
template: function MyComponent_Template(rf, ctx) {
if (rf & 1) {
$r3$.Δtext(0, "\n ");
$r3$.ΔelementStart(1, "div");
- $r3$.Δi18nStart(2, $MSG_EXTERNAL_963542717423364282$$APP_SPEC_TS_0$);
+ $r3$.Δi18nStart(2, $I18N_0$);
$r3$.Δelement(3, "span");
$r3$.Δi18nEnd();
$r3$.ΔelementEnd();
@@ -1823,8 +2396,15 @@ describe('i18n support in the view compiler', () => {
`;
const output = String.raw `
- const $MSG_EXTERNAL_7842238767399919809$$APP_SPEC_TS_0$ = goog.getMsg("{VAR_SELECT, select, male {male} female {female} other {other}}");
- const $I18N_EXTERNAL_7842238767399919809$$APP_SPEC_TS_0$ = $r3$.Δi18nPostprocess($MSG_EXTERNAL_7842238767399919809$$APP_SPEC_TS_0$, {
+ var $I18N_0$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_7842238767399919809$$APP_SPEC_TS_0$ = goog.getMsg("{VAR_SELECT, select, male {male} female {female} other {other}}");
+ $I18N_0$ = $MSG_EXTERNAL_7842238767399919809$$APP_SPEC_TS_0$;
+ }
+ else {
+ $I18N_0$ = $r3$.Δi18nLocalize("{VAR_SELECT, select, male {male} female {female} other {other}}");
+ }
+ $I18N_0$ = $r3$.Δi18nPostprocess($I18N_0$, {
"VAR_SELECT": "\uFFFD0\uFFFD"
});
…
@@ -1833,7 +2413,7 @@ describe('i18n support in the view compiler', () => {
template: function MyComponent_Template(rf, ctx) {
if (rf & 1) {
$r3$.ΔelementStart(0, "div");
- $r3$.Δi18n(1, $I18N_EXTERNAL_7842238767399919809$$APP_SPEC_TS_0$);
+ $r3$.Δi18n(1, $I18N_0$);
$r3$.ΔelementEnd();
}
if (rf & 2) {
@@ -1853,8 +2433,15 @@ describe('i18n support in the view compiler', () => {
`;
const output = String.raw `
- const $MSG_EXTERNAL_4166854826696768832$$APP_SPEC_TS_0$ = goog.getMsg("{VAR_SELECT, select, single {'single quotes'} double {\"double quotes\"} other {other}}");
- const $I18N_EXTERNAL_4166854826696768832$$APP_SPEC_TS_0$ = $r3$.Δi18nPostprocess($MSG_EXTERNAL_4166854826696768832$$APP_SPEC_TS_0$, {
+ var $I18N_0$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_4166854826696768832$$APP_SPEC_TS_0$ = goog.getMsg("{VAR_SELECT, select, single {'single quotes'} double {\"double quotes\"} other {other}}");
+ $I18N_0$ = $MSG_EXTERNAL_4166854826696768832$$APP_SPEC_TS_0$;
+ }
+ else {
+ $I18N_0$ = $r3$.Δi18nLocalize("{VAR_SELECT, select, single {'single quotes'} double {\"double quotes\"} other {other}}");
+ }
+ $I18N_0$ = $r3$.Δi18nPostprocess($I18N_0$, {
"VAR_SELECT": "\uFFFD0\uFFFD"
});
`;
@@ -1868,14 +2455,23 @@ describe('i18n support in the view compiler', () => {
`;
const output = String.raw `
- const $MSG_EXTERNAL_8806993169187953163$$APP_SPEC_TS_0$ = goog.getMsg("{VAR_SELECT, select, 10 {ten} 20 {twenty} other {other}}");
- const $I18N_EXTERNAL_8806993169187953163$$APP_SPEC_TS_0$ = $r3$.Δi18nPostprocess($MSG_EXTERNAL_8806993169187953163$$APP_SPEC_TS_0$, { "VAR_SELECT": "\uFFFD0\uFFFD" });
+ var $I18N_0$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_8806993169187953163$$APP_SPEC_TS_0$ = goog.getMsg("{VAR_SELECT, select, 10 {ten} 20 {twenty} other {other}}");
+ $I18N_0$ = $MSG_EXTERNAL_8806993169187953163$$APP_SPEC_TS_0$;
+ }
+ else {
+ $I18N_0$ = $r3$.Δi18nLocalize("{VAR_SELECT, select, 10 {ten} 20 {twenty} other {other}}");
+ }
+ $I18N_0$ = $r3$.Δi18nPostprocess($I18N_0$, {
+ "VAR_SELECT": "\uFFFD0\uFFFD"
+ });
…
consts: 1,
vars: 1,
template: function MyComponent_Template(rf, ctx) {
if (rf & 1) {
- $r3$.Δi18n(0, $I18N_EXTERNAL_8806993169187953163$$APP_SPEC_TS_0$);
+ $r3$.Δi18n(0, $I18N_0$);
}
if (rf & 2) {
$r3$.Δselect(0);
@@ -1900,21 +2496,35 @@ describe('i18n support in the view compiler', () => {
`;
const output = String.raw `
- const $MSG_EXTERNAL_7842238767399919809$$APP_SPEC_TS_0$ = goog.getMsg("{VAR_SELECT, select, male {male} female {female} other {other}}");
- const $I18N_EXTERNAL_7842238767399919809$$APP_SPEC_TS_0$ = $r3$.Δi18nPostprocess($MSG_EXTERNAL_7842238767399919809$$APP_SPEC_TS_0$, {
+ var $I18N_0$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_7842238767399919809$$APP_SPEC_TS_0$ = goog.getMsg("{VAR_SELECT, select, male {male} female {female} other {other}}");
+ $I18N_0$ = $MSG_EXTERNAL_7842238767399919809$$APP_SPEC_TS_0$;
+ }
+ else {
+ $I18N_0$ = $r3$.Δi18nLocalize("{VAR_SELECT, select, male {male} female {female} other {other}}");
+ }
+ $I18N_0$ = $r3$.Δi18nPostprocess($I18N_0$, {
"VAR_SELECT": "\uFFFD0\uFFFD"
});
const $_c0$ = ["title", "icu only", ${AttributeMarker.Template}, "ngIf"];
const $_c1$ = ["title", "icu and text", ${AttributeMarker.Template}, "ngIf"];
const $_c2$ = ["title", "icu only"];
- const $MSG_EXTERNAL_8806993169187953163$$APP_SPEC_TS__3$ = goog.getMsg("{VAR_SELECT, select, 10 {ten} 20 {twenty} other {other}}");
- const $I18N_EXTERNAL_8806993169187953163$$APP_SPEC_TS__3$ = $r3$.Δi18nPostprocess($MSG_EXTERNAL_8806993169187953163$$APP_SPEC_TS__3$, {
+ var $I18N_3$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_8806993169187953163$$APP_SPEC_TS__3$ = goog.getMsg("{VAR_SELECT, select, 10 {ten} 20 {twenty} other {other}}");
+ $I18N_3$ = $MSG_EXTERNAL_8806993169187953163$$APP_SPEC_TS__3$;
+ }
+ else {
+ $I18N_3$ = $r3$.Δi18nLocalize("{VAR_SELECT, select, 10 {ten} 20 {twenty} other {other}}");
+ }
+ $I18N_3$ = $r3$.Δi18nPostprocess($I18N_3$, {
"VAR_SELECT": "\uFFFD0\uFFFD"
});
function MyComponent_div_2_Template(rf, ctx) {
if (rf & 1) {
$r3$.ΔelementStart(0, "div", $_c2$);
- $r3$.Δi18n(1, $I18N_EXTERNAL_8806993169187953163$$APP_SPEC_TS__3$);
+ $r3$.Δi18n(1, $I18N_3$);
$r3$.ΔelementEnd();
}
if (rf & 2) {
@@ -1925,17 +2535,26 @@ describe('i18n support in the view compiler', () => {
}
}
const $_c3$ = ["title", "icu and text"];
- const $MSG_EXTERNAL_1922743304863699161$$APP_SPEC_TS__5$ = goog.getMsg("{VAR_SELECT, select, 0 {no emails} 1 {one email} other {{$interpolation} emails}}", {
- "interpolation": "\uFFFD1\uFFFD"
- });
- const $I18N_EXTERNAL_1922743304863699161$$APP_SPEC_TS__5$ = $r3$.Δi18nPostprocess($MSG_EXTERNAL_1922743304863699161$$APP_SPEC_TS__5$, {
+ var $I18N_5$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_1922743304863699161$$APP_SPEC_TS__5$ = goog.getMsg("{VAR_SELECT, select, 0 {no emails} 1 {one email} other {{$interpolation} emails}}", {
+ "interpolation": "\uFFFD1\uFFFD"
+ });
+ $I18N_5$ = $MSG_EXTERNAL_1922743304863699161$$APP_SPEC_TS__5$;
+ }
+ else {
+ $I18N_5$ = $r3$.Δi18nLocalize("{VAR_SELECT, select, 0 {no emails} 1 {one email} other {{$interpolation} emails}}", {
+ "interpolation": "\uFFFD1\uFFFD"
+ });
+ }
+ $I18N_5$ = $r3$.Δi18nPostprocess($I18N_5$, {
"VAR_SELECT": "\uFFFD0\uFFFD"
});
function MyComponent_div_3_Template(rf, ctx) {
if (rf & 1) {
$r3$.ΔelementStart(0, "div", $_c3$);
$r3$.Δtext(1, " You have ");
- $r3$.Δi18n(2, $I18N_EXTERNAL_1922743304863699161$$APP_SPEC_TS__5$);
+ $r3$.Δi18n(2, $I18N_5$);
$r3$.Δtext(3, ". ");
$r3$.ΔelementEnd();
}
@@ -1953,7 +2572,7 @@ describe('i18n support in the view compiler', () => {
template: function MyComponent_Template(rf, ctx) {
if (rf & 1) {
$r3$.ΔelementStart(0, "div");
- $r3$.Δi18n(1, $I18N_EXTERNAL_7842238767399919809$$APP_SPEC_TS_0$);
+ $r3$.Δi18n(1, $I18N_0$);
$r3$.ΔelementEnd();
$r3$.Δtemplate(2, MyComponent_div_2_Template, 2, 1, "div", $_c0$);
$r3$.Δtemplate(3, MyComponent_div_3_Template, 4, 2, "div", $_c1$);
@@ -1979,15 +2598,26 @@ describe('i18n support in the view compiler', () => {
`;
const output = String.raw `
- const $MSG_EXTERNAL_2949673783721159566$$RAW$ = goog.getMsg("{VAR_SELECT, select, 10 {ten} 20 {twenty} other {{$interpolation}}}", {
- "interpolation": "\uFFFD1\uFFFD"
+ var $I18N_0$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_2949673783721159566$$APP_SPEC_TS_0$ = goog.getMsg("{VAR_SELECT, select, 10 {ten} 20 {twenty} other {{$interpolation}}}", {
+ "interpolation": "\uFFFD1\uFFFD"
+ });
+ $I18N_0$ = $MSG_EXTERNAL_2949673783721159566$$APP_SPEC_TS_0$;
+ }
+ else {
+ $I18N_0$ = $r3$.Δi18nLocalize("{VAR_SELECT, select, 10 {ten} 20 {twenty} other {{$interpolation}}}", {
+ "interpolation": "\uFFFD1\uFFFD"
+ });
+ }
+ $I18N_0$ = $r3$.Δi18nPostprocess($I18N_0$, {
+ "VAR_SELECT": "\uFFFD0\uFFFD"
});
- const $MSG_EXTERNAL_2949673783721159566$ = $r3$.Δi18nPostprocess($MSG_EXTERNAL_2949673783721159566$$RAW$, { "VAR_SELECT": "\uFFFD0\uFFFD" });
…
template: function MyComponent_Template(rf, ctx) {
if (rf & 1) {
$r3$.ΔelementStart(0, "div");
- $r3$.Δi18n(1, $MSG_EXTERNAL_2949673783721159566$);
+ $r3$.Δi18n(1, $I18N_0$);
$r3$.ΔelementEnd();
}
if (rf & 2) {
@@ -2011,37 +2641,66 @@ describe('i18n support in the view compiler', () => {
`;
const output = String.raw `
- const $MSG_EXTERNAL_2417296354340576868$$APP_SPEC_TS_1$ = goog.getMsg("{VAR_SELECT, select, male {male - {$startBoldText}male{$closeBoldText}} female {female {$startBoldText}female{$closeBoldText}} other {{$startTagDiv}{$startItalicText}other{$closeItalicText}{$closeTagDiv}}}", {
- "startBoldText": "
",
- "closeBoldText": "",
- "startItalicText": "
",
- "closeItalicText": "",
- "startTagDiv": "
",
- "closeTagDiv": "
"
- });
- const $I18N_EXTERNAL_2417296354340576868$$APP_SPEC_TS_1$ = $r3$.Δi18nPostprocess($MSG_EXTERNAL_2417296354340576868$$APP_SPEC_TS_1$, {
+ var $I18N_1$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_2417296354340576868$$APP_SPEC_TS_1$ = goog.getMsg("{VAR_SELECT, select, male {male - {$startBoldText}male{$closeBoldText}} female {female {$startBoldText}female{$closeBoldText}} other {{$startTagDiv}{$startItalicText}other{$closeItalicText}{$closeTagDiv}}}", {
+ "startBoldText": "
",
+ "closeBoldText": "",
+ "startItalicText": "
",
+ "closeItalicText": "",
+ "startTagDiv": "
",
+ "closeTagDiv": "
"
+ });
+ $I18N_1$ = $MSG_EXTERNAL_2417296354340576868$$APP_SPEC_TS_1$;
+ }
+ else {
+ $I18N_1$ = $r3$.Δi18nLocalize("{VAR_SELECT, select, male {male - {$startBoldText}male{$closeBoldText}} female {female {$startBoldText}female{$closeBoldText}} other {{$startTagDiv}{$startItalicText}other{$closeItalicText}{$closeTagDiv}}}", {
+ "startBoldText": "
",
+ "closeBoldText": "",
+ "startItalicText": "
",
+ "closeItalicText": "",
+ "startTagDiv": "
",
+ "closeTagDiv": "
"
+ });
+ }
+ $I18N_1$ = $r3$.Δi18nPostprocess($I18N_1$, {
"VAR_SELECT": "\uFFFD0\uFFFD"
});
- const $_c0$ = ["other", 1, "other", true];
- const $MSG_EXTERNAL_5791551881115084301$$APP_SPEC_TS_0$ = goog.getMsg("{$icu}{$startBoldText}Other content{$closeBoldText}{$startTagDiv}{$startItalicText}Another content{$closeItalicText}{$closeTagDiv}", {
- "startBoldText": "\uFFFD#2\uFFFD",
- "closeBoldText": "\uFFFD/#2\uFFFD",
- "startTagDiv": "\uFFFD#3\uFFFD",
- "startItalicText": "\uFFFD#4\uFFFD",
- "closeItalicText": "\uFFFD/#4\uFFFD",
- "closeTagDiv": "\uFFFD/#3\uFFFD",
- "icu": $I18N_EXTERNAL_2417296354340576868$$APP_SPEC_TS_1$
- });
+ const $_c2$ = [1, "other"];
+ var $I18N_0$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_5791551881115084301$$APP_SPEC_TS_0$ = goog.getMsg("{$icu}{$startBoldText}Other content{$closeBoldText}{$startTagDiv}{$startItalicText}Another content{$closeItalicText}{$closeTagDiv}", {
+ "startBoldText": "\uFFFD#2\uFFFD",
+ "closeBoldText": "\uFFFD/#2\uFFFD",
+ "startTagDiv": "\uFFFD#3\uFFFD",
+ "startItalicText": "\uFFFD#4\uFFFD",
+ "closeItalicText": "\uFFFD/#4\uFFFD",
+ "closeTagDiv": "\uFFFD/#3\uFFFD",
+ "icu": I18N_APP_SPEC_TS_1
+ });
+ $I18N_0$ = $MSG_EXTERNAL_5791551881115084301$$APP_SPEC_TS_0$;
+ }
+ else {
+ $I18N_0$ = $r3$.Δi18nLocalize("{$icu}{$startBoldText}Other content{$closeBoldText}{$startTagDiv}{$startItalicText}Another content{$closeItalicText}{$closeTagDiv}", {
+ "startBoldText": "\uFFFD#2\uFFFD",
+ "closeBoldText": "\uFFFD/#2\uFFFD",
+ "startTagDiv": "\uFFFD#3\uFFFD",
+ "startItalicText": "\uFFFD#4\uFFFD",
+ "closeItalicText": "\uFFFD/#4\uFFFD",
+ "closeTagDiv": "\uFFFD/#3\uFFFD",
+ "icu": I18N_APP_SPEC_TS_1
+ });
+ }
…
consts: 5,
vars: 1,
template: function MyComponent_Template(rf, ctx) {
if (rf & 1) {
$r3$.ΔelementStart(0, "div");
- $r3$.Δi18nStart(1, $MSG_EXTERNAL_5791551881115084301$$APP_SPEC_TS_0$);
+ $r3$.Δi18nStart(1, $I18N_0$);
$r3$.Δelement(2, "b");
$r3$.ΔelementStart(3, "div");
- $r3$.ΔelementStyling($_c0$);
+ $r3$.ΔelementStyling($_c2$);
$r3$.Δelement(4, "i");
$r3$.ΔelementEnd();
$r3$.Δi18nEnd();
@@ -2063,10 +2722,19 @@ describe('i18n support in the view compiler', () => {
`;
const output = String.raw `
- const $MSG_EXTERNAL_6879461626778511059$$APP_SPEC_TS_0$ = goog.getMsg("{VAR_SELECT, select, male {male of age: {$interpolation}} female {female} other {other}}", {
- "interpolation": "\uFFFD1\uFFFD"
- });
- const $I18N_EXTERNAL_6879461626778511059$$APP_SPEC_TS_0$ = $r3$.Δi18nPostprocess($MSG_EXTERNAL_6879461626778511059$$APP_SPEC_TS_0$, {
+ var $I18N_0$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_6879461626778511059$$APP_SPEC_TS_0$ = goog.getMsg("{VAR_SELECT, select, male {male of age: {$interpolation}} female {female} other {other}}", {
+ "interpolation": "\uFFFD1\uFFFD"
+ });
+ $I18N_0$ = $MSG_EXTERNAL_6879461626778511059$$APP_SPEC_TS_0$;
+ }
+ else {
+ $I18N_0$ = $r3$.Δi18nLocalize("{VAR_SELECT, select, male {male of age: {$interpolation}} female {female} other {other}}", {
+ "interpolation": "\uFFFD1\uFFFD"
+ });
+ }
+ $I18N_0$ = $r3$.Δi18nPostprocess($I18N_0$, {
"VAR_SELECT": "\uFFFD0\uFFFD"
});
…
@@ -2075,7 +2743,7 @@ describe('i18n support in the view compiler', () => {
template: function MyComponent_Template(rf, ctx) {
if (rf & 1) {
$r3$.ΔelementStart(0, "div");
- $r3$.Δi18n(1, $I18N_EXTERNAL_6879461626778511059$$APP_SPEC_TS_0$);
+ $r3$.Δi18n(1, $I18N_0$);
$r3$.ΔelementEnd();
}
if (rf & 2) {
@@ -2099,25 +2767,49 @@ describe('i18n support in the view compiler', () => {
`;
const output = String.raw `
- const $MSG_EXTERNAL_7842238767399919809$$APP_SPEC_TS_1$ = goog.getMsg("{VAR_SELECT, select, male {male} female {female} other {other}}");
- const $I18N_EXTERNAL_7842238767399919809$$APP_SPEC_TS_1$ = $r3$.Δi18nPostprocess($MSG_EXTERNAL_7842238767399919809$$APP_SPEC_TS_1$, {
+ var $I18N_1$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_7842238767399919809$$APP_SPEC_TS_1$ = goog.getMsg("{VAR_SELECT, select, male {male} female {female} other {other}}");
+ $I18N_1$ = $MSG_EXTERNAL_7842238767399919809$$APP_SPEC_TS_1$;
+ }
+ else {
+ $I18N_1$ = $r3$.Δi18nLocalize("{VAR_SELECT, select, male {male} female {female} other {other}}");
+ }
+ $I18N_1$ = $r3$.Δi18nPostprocess($I18N_1$, {
"VAR_SELECT": "\uFFFD0\uFFFD"
});
- const $MSG_EXTERNAL_7068143081688428291$$APP_SPEC_TS_2$ = goog.getMsg("{VAR_SELECT, select, 10 {ten} 20 {twenty} 30 {thirty} other {other}}");
- const $I18N_EXTERNAL_7068143081688428291$$APP_SPEC_TS_2$ = $r3$.Δi18nPostprocess($MSG_EXTERNAL_7068143081688428291$$APP_SPEC_TS_2$, {
+ var $I18N_2$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_7068143081688428291$$APP_SPEC_TS_2$ = goog.getMsg("{VAR_SELECT, select, 10 {ten} 20 {twenty} 30 {thirty} other {other}}");
+ $I18N_2$ = $MSG_EXTERNAL_7068143081688428291$$APP_SPEC_TS_2$;
+ }
+ else {
+ $I18N_2$ = $r3$.Δi18nLocalize("{VAR_SELECT, select, 10 {ten} 20 {twenty} 30 {thirty} other {other}}");
+ }
+ $I18N_2$ = $r3$.Δi18nPostprocess($I18N_2$, {
"VAR_SELECT": "\uFFFD1\uFFFD"
});
- const $MSG_EXTERNAL_2967249209167308918$$APP_SPEC_TS_0$ = goog.getMsg("{$icu}{$icu_1}", {
- "icu": $I18N_EXTERNAL_7842238767399919809$$APP_SPEC_TS_1$,
- "icu_1": $I18N_EXTERNAL_7068143081688428291$$APP_SPEC_TS_2$
- });
+ var $I18N_0$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_2967249209167308918$$APP_SPEC_TS_0$ = goog.getMsg("{$icu}{$icu_1}", {
+ "icu": $I18N_1$,
+ "icu_1": $I18N_2$
+ });
+ $I18N_0$ = $MSG_EXTERNAL_2967249209167308918$$APP_SPEC_TS_0$;
+ }
+ else {
+ $I18N_0$ = $r3$.Δi18nLocalize("{$icu}{$icu_1}", {
+ "icu": $I18N_1$,
+ "icu_1": $I18N_2$
+ });
+ }
…
consts: 2,
vars: 2,
template: function MyComponent_Template(rf, ctx) {
if (rf & 1) {
$r3$.ΔelementStart(0, "div");
- $r3$.Δi18n(1, $MSG_EXTERNAL_2967249209167308918$$APP_SPEC_TS_0$);
+ $r3$.Δi18n(1, $I18N_0$);
$r3$.ΔelementEnd();
}
if (rf & 2) {
@@ -2146,33 +2838,66 @@ describe('i18n support in the view compiler', () => {
`;
const output = String.raw `
- const $MSG_APP_SPEC_TS_1$ = goog.getMsg("{VAR_SELECT, select, male {male} female {female} other {other}}");
- const $I18N_APP_SPEC_TS_1$ = $r3$.Δi18nPostprocess($MSG_APP_SPEC_TS_1$, {
+ var $I18N_1$;
+ if (ngI18nClosureMode) {
+ const $MSG_APP_SPEC_TS_1$ = goog.getMsg("{VAR_SELECT, select, male {male} female {female} other {other}}");
+ $I18N_1$ = $MSG_APP_SPEC_TS_1$;
+ }
+ else {
+ $I18N_1$ = $r3$.Δi18nLocalize("{VAR_SELECT, select, male {male} female {female} other {other}}");
+ }
+ $I18N_1$ = $r3$.Δi18nPostprocess($I18N_1$, {
"VAR_SELECT": "\uFFFD0\uFFFD"
});
- const $MSG_APP_SPEC_TS_2$ = goog.getMsg("{VAR_SELECT, select, male {male} female {female} other {other}}");
- const $I18N_APP_SPEC_TS_2$ = $r3$.Δi18nPostprocess($MSG_APP_SPEC_TS_2$, {
+ var $I18N_2$;
+ if (ngI18nClosureMode) {
+ const $MSG_APP_SPEC_TS_2$ = goog.getMsg("{VAR_SELECT, select, male {male} female {female} other {other}}");
+ $I18N_2$ = $MSG_APP_SPEC_TS_2$;
+ }
+ else {
+ $I18N_2$ = $r3$.Δi18nLocalize("{VAR_SELECT, select, male {male} female {female} other {other}}");
+ }
+ $I18N_2$ = $r3$.Δi18nPostprocess($I18N_2$, {
"VAR_SELECT": "\uFFFD1\uFFFD"
});
const $_c3$ = [${AttributeMarker.Template}, "ngIf"];
- const $MSG_APP_SPEC_TS__4$ = goog.getMsg("{VAR_SELECT, select, male {male} female {female} other {other}}");
- const $I18N_APP_SPEC_TS__4$ = $r3$.Δi18nPostprocess($MSG_APP_SPEC_TS__4$, {
+ var $I18N_4$;
+ if (ngI18nClosureMode) {
+ const $MSG_APP_SPEC_TS__4$ = goog.getMsg("{VAR_SELECT, select, male {male} female {female} other {other}}");
+ $I18N_4$ = $MSG_APP_SPEC_TS__4$;
+ }
+ else {
+ $I18N_4$ = $r3$.Δi18nLocalize("{VAR_SELECT, select, male {male} female {female} other {other}}");
+ }
+ $I18N_4$ = $r3$.Δi18nPostprocess($I18N_4$, {
"VAR_SELECT": "\uFFFD0:1\uFFFD"
});
- const $MSG_APP_SPEC_TS_0$ = goog.getMsg("{$icu}{$startTagDiv}{$icu}{$closeTagDiv}{$startTagDiv_1}{$icu}{$closeTagDiv}", {
- "startTagDiv": "\uFFFD#2\uFFFD",
- "closeTagDiv": "[\uFFFD/#2\uFFFD|\uFFFD/#1:1\uFFFD\uFFFD/*3:1\uFFFD]",
- "startTagDiv_1": "\uFFFD*3:1\uFFFD\uFFFD#1:1\uFFFD",
- "icu": "\uFFFDI18N_EXP_ICU\uFFFD"
- });
- const $I18N_APP_SPEC_TS_0$ = $r3$.Δi18nPostprocess($MSG_APP_SPEC_TS_0$, {
- "ICU": [$I18N_APP_SPEC_TS_1$, $I18N_APP_SPEC_TS_2$, $I18N_APP_SPEC_TS__4$]
+ var $I18N_0$;
+ if (ngI18nClosureMode) {
+ const $MSG_APP_SPEC_TS_0$ = goog.getMsg("{$icu}{$startTagDiv}{$icu}{$closeTagDiv}{$startTagDiv_1}{$icu}{$closeTagDiv}", {
+ "startTagDiv": "\uFFFD#2\uFFFD",
+ "closeTagDiv": "[\uFFFD/#2\uFFFD|\uFFFD/#1:1\uFFFD\uFFFD/*3:1\uFFFD]",
+ "startTagDiv_1": "\uFFFD*3:1\uFFFD\uFFFD#1:1\uFFFD",
+ "icu": "\uFFFDI18N_EXP_ICU\uFFFD"
+ });
+ $I18N_0$ = $MSG_APP_SPEC_TS_0$;
+ }
+ else {
+ $I18N_0$ = $r3$.Δi18nLocalize("{$icu}{$startTagDiv}{$icu}{$closeTagDiv}{$startTagDiv_1}{$icu}{$closeTagDiv}", {
+ "startTagDiv": "\uFFFD#2\uFFFD",
+ "closeTagDiv": "[\uFFFD/#2\uFFFD|\uFFFD/#1:1\uFFFD\uFFFD/*3:1\uFFFD]",
+ "startTagDiv_1": "\uFFFD*3:1\uFFFD\uFFFD#1:1\uFFFD",
+ "icu": "\uFFFDI18N_EXP_ICU\uFFFD"
+ });
+ }
+ $I18N_0$ = $r3$.Δi18nPostprocess($I18N_0$, {
+ "ICU": [$I18N_1$, $I18N_2$, $I18N_4$]
});
function MyComponent_div_3_Template(rf, ctx) {
if (rf & 1) {
- $r3$.Δi18nStart(0, $I18N_APP_SPEC_TS_0$, 1);
- $r3$.Δelement(1, "div");
- $r3$.Δi18nEnd();
+ $r3$.Δi18nStart(0, $I18N_0$, 1);
+ $r3$.Δelement(1, "div");
+ $r3$.Δi18nEnd();
}
if (rf & 2) {
const $ctx_r0$ = $r3$.ΔnextContext();
@@ -2187,7 +2912,7 @@ describe('i18n support in the view compiler', () => {
template: function MyComponent_Template(rf, ctx) {
if (rf & 1) {
$r3$.ΔelementStart(0, "div");
- $r3$.Δi18nStart(1, $I18N_APP_SPEC_TS_0$);
+ $r3$.Δi18nStart(1, $I18N_0$);
$r3$.Δelement(2, "div");
$r3$.Δtemplate(3, MyComponent_div_3_Template, 2, 1, "div", $_c3$);
$r3$.Δi18nEnd();
@@ -2221,8 +2946,15 @@ describe('i18n support in the view compiler', () => {
`;
const output = String.raw `
- const $MSG_EXTERNAL_343563413083115114$$APP_SPEC_TS_0$ = goog.getMsg("{VAR_SELECT_1, select, male {male of age: {VAR_SELECT, select, 10 {ten} 20 {twenty} 30 {thirty} other {other}}} female {female} other {other}}");
- const $I18N_EXTERNAL_343563413083115114$$APP_SPEC_TS_0$ = $r3$.Δi18nPostprocess($MSG_EXTERNAL_343563413083115114$$APP_SPEC_TS_0$, {
+ var $I18N_0$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_343563413083115114$$APP_SPEC_TS_0$ = goog.getMsg("{VAR_SELECT_1, select, male {male of age: {VAR_SELECT, select, 10 {ten} 20 {twenty} 30 {thirty} other {other}}} female {female} other {other}}");
+ $I18N_0$ = $MSG_EXTERNAL_343563413083115114$$APP_SPEC_TS_0$;
+ }
+ else {
+ $I18N_0$ = $r3$.Δi18nLocalize("{VAR_SELECT_1, select, male {male of age: {VAR_SELECT, select, 10 {ten} 20 {twenty} 30 {thirty} other {other}}} female {female} other {other}}");
+ }
+ $I18N_0$ = $r3$.Δi18nPostprocess($I18N_0$, {
"VAR_SELECT": "\uFFFD0\uFFFD",
"VAR_SELECT_1": "\uFFFD1\uFFFD"
});
@@ -2232,7 +2964,7 @@ describe('i18n support in the view compiler', () => {
template: function MyComponent_Template(rf, ctx) {
if (rf & 1) {
$r3$.ΔelementStart(0, "div");
- $r3$.Δi18n(1, $I18N_EXTERNAL_343563413083115114$$APP_SPEC_TS_0$);
+ $r3$.Δi18n(1, $I18N_0$);
$r3$.ΔelementEnd();
}
if (rf & 2) {
@@ -2261,24 +2993,50 @@ describe('i18n support in the view compiler', () => {
`;
const output = String.raw `
- const $MSG_EXTERNAL_7842238767399919809$$APP_SPEC_TS_1$ = goog.getMsg("{VAR_SELECT, select, male {male} female {female} other {other}}");
- const $I18N_EXTERNAL_7842238767399919809$$APP_SPEC_TS_1$ = $r3$.Δi18nPostprocess($MSG_EXTERNAL_7842238767399919809$$APP_SPEC_TS_1$, {
+ var $I18N_1$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_7842238767399919809$$APP_SPEC_TS_1$ = goog.getMsg("{VAR_SELECT, select, male {male} female {female} other {other}}");
+ $I18N_1$ = $MSG_EXTERNAL_7842238767399919809$$APP_SPEC_TS_1$;
+ }
+ else {
+ $I18N_1$ = $r3$.Δi18nLocalize("{VAR_SELECT, select, male {male} female {female} other {other}}");
+ }
+ $I18N_1$ = $r3$.Δi18nPostprocess($I18N_1$, {
"VAR_SELECT": "\uFFFD0\uFFFD"
});
- const $_c0$ = [${AttributeMarker.Template}, "ngIf"];
- const $MSG_EXTERNAL_7068143081688428291$$APP_SPEC_TS__3$ = goog.getMsg("{VAR_SELECT, select, 10 {ten} 20 {twenty} 30 {thirty} other {other}}");
- const $I18N_EXTERNAL_7068143081688428291$$APP_SPEC_TS__3$ = $r3$.Δi18nPostprocess($MSG_EXTERNAL_7068143081688428291$$APP_SPEC_TS__3$, {
+ const $_c2$ = [${AttributeMarker.Template}, "ngIf"];
+ var $I18N_3$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_7068143081688428291$$APP_SPEC_TS__3$ = goog.getMsg("{VAR_SELECT, select, 10 {ten} 20 {twenty} 30 {thirty} other {other}}");
+ $I18N_3$ = $MSG_EXTERNAL_7068143081688428291$$APP_SPEC_TS__3$;
+ }
+ else {
+ $I18N_3$ = $r3$.Δi18nLocalize("{VAR_SELECT, select, 10 {ten} 20 {twenty} 30 {thirty} other {other}}");
+ }
+ $I18N_3$ = $r3$.Δi18nPostprocess($I18N_3$, {
"VAR_SELECT": "\uFFFD0:1\uFFFD"
});
- const $MSG_EXTERNAL_1194472282609532229$$APP_SPEC_TS_0$ = goog.getMsg("{$icu}{$startTagSpan}{$icu_1}{$closeTagSpan}", {
- "startTagSpan": "\uFFFD*2:1\uFFFD\uFFFD#1:1\uFFFD",
- "closeTagSpan": "\uFFFD/#1:1\uFFFD\uFFFD/*2:1\uFFFD",
- "icu": $I18N_EXTERNAL_7842238767399919809$$APP_SPEC_TS_1$,
- "icu_1": $I18N_EXTERNAL_7068143081688428291$$APP_SPEC_TS__3$
- });
+ var $I18N_0$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_1194472282609532229$$APP_SPEC_TS_0$ = goog.getMsg("{$icu}{$startTagSpan}{$icu_1}{$closeTagSpan}", {
+ "startTagSpan": "\uFFFD*2:1\uFFFD\uFFFD#1:1\uFFFD",
+ "closeTagSpan": "\uFFFD/#1:1\uFFFD\uFFFD/*2:1\uFFFD",
+ "icu": $I18N_1$,
+ "icu_1": $I18N_3$
+ });
+ $I18N_0$ = $MSG_EXTERNAL_1194472282609532229$$APP_SPEC_TS_0$;
+ }
+ else {
+ $I18N_0$ = $r3$.Δi18nLocalize("{$icu}{$startTagSpan}{$icu_1}{$closeTagSpan}", {
+ "startTagSpan": "\uFFFD*2:1\uFFFD\uFFFD#1:1\uFFFD",
+ "closeTagSpan": "\uFFFD/#1:1\uFFFD\uFFFD/*2:1\uFFFD",
+ "icu": $I18N_1$,
+ "icu_1": $I18N_3$
+ });
+ }
function MyComponent_span_2_Template(rf, ctx) {
if (rf & 1) {
- $r3$.Δi18nStart(0, $MSG_EXTERNAL_1194472282609532229$$APP_SPEC_TS_0$, 1);
+ $r3$.Δi18nStart(0, $I18N_0$, 1);
$r3$.Δelement(1, "span");
$r3$.Δi18nEnd();
}
@@ -2295,7 +3053,7 @@ describe('i18n support in the view compiler', () => {
template: function MyComponent_Template(rf, ctx) {
if (rf & 1) {
$r3$.ΔelementStart(0, "div");
- $r3$.Δi18nStart(1, $MSG_EXTERNAL_1194472282609532229$$APP_SPEC_TS_0$);
+ $r3$.Δi18nStart(1, $I18N_0$);
$r3$.Δtemplate(2, MyComponent_span_2_Template, 2, 1, "span", $_c2$);
$r3$.Δi18nEnd();
$r3$.ΔelementEnd();
@@ -2323,29 +3081,60 @@ describe('i18n support in the view compiler', () => {
`;
const output = String.raw `
- const $MSG_EXTERNAL_7825031864601787094$$APP_SPEC_TS_1$ = goog.getMsg("{VAR_SELECT, select, male {male {$interpolation}} female {female {$interpolation_1}} other {other}}", {
- "interpolation": "\uFFFD1\uFFFD",
- "interpolation_1": "\uFFFD2\uFFFD"
- });
- const $I18N_EXTERNAL_7825031864601787094$$APP_SPEC_TS_1$ = $r3$.Δi18nPostprocess($MSG_EXTERNAL_7825031864601787094$$APP_SPEC_TS_1$, {
+ var $I18N_1$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_7825031864601787094$$APP_SPEC_TS_1$ = goog.getMsg("{VAR_SELECT, select, male {male {$interpolation}} female {female {$interpolation_1}} other {other}}", {
+ "interpolation": "\uFFFD1\uFFFD",
+ "interpolation_1": "\uFFFD2\uFFFD"
+ });
+ $I18N_1$ = $MSG_EXTERNAL_7825031864601787094$$APP_SPEC_TS_1$;
+ }
+ else {
+ $I18N_1$ = $r3$.Δi18nLocalize("{VAR_SELECT, select, male {male {$interpolation}} female {female {$interpolation_1}} other {other}}", {
+ "interpolation": "\uFFFD1\uFFFD",
+ "interpolation_1": "\uFFFD2\uFFFD"
+ });
+ }
+ $I18N_1$ = $r3$.Δi18nPostprocess($I18N_1$, {
"VAR_SELECT": "\uFFFD0\uFFFD"
});
const $_c0$ = [${AttributeMarker.Template}, "ngIf"];
- const $MSG_EXTERNAL_2310343208266678305$$APP_SPEC_TS__3$ = goog.getMsg("{VAR_SELECT, select, 10 {ten} 20 {twenty} 30 {thirty} other {other: {$interpolation}}}", {
- "interpolation": "\uFFFD1:1\uFFFD"
- });
- const $I18N_EXTERNAL_2310343208266678305$$APP_SPEC_TS__3$ = $r3$.Δi18nPostprocess($MSG_EXTERNAL_2310343208266678305$$APP_SPEC_TS__3$, {
+ var $I18N_3$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_2310343208266678305$$APP_SPEC_TS__3$ = goog.getMsg("{VAR_SELECT, select, 10 {ten} 20 {twenty} 30 {thirty} other {other: {$interpolation}}}", {
+ "interpolation": "\uFFFD1:1\uFFFD"
+ });
+ $I18N_3$ = $MSG_EXTERNAL_2310343208266678305$$APP_SPEC_TS__3$;
+ }
+ else {
+ $I18N_3$ = $r3$.Δi18nLocalize("{VAR_SELECT, select, 10 {ten} 20 {twenty} 30 {thirty} other {other: {$interpolation}}}", {
+ "interpolation": "\uFFFD1:1\uFFFD"
+ });
+ }
+ $I18N_3$ = $r3$.Δi18nPostprocess($I18N_3$, {
"VAR_SELECT": "\uFFFD0:1\uFFFD"
});
- const $MSG_EXTERNAL_7186042105600518133$$APP_SPEC_TS_0$ = goog.getMsg("{$icu}{$startTagSpan}{$icu_1}{$closeTagSpan}", {
- "startTagSpan": "\uFFFD*2:1\uFFFD\uFFFD#1:1\uFFFD",
- "closeTagSpan": "\uFFFD/#1:1\uFFFD\uFFFD/*2:1\uFFFD",
- "icu": $I18N_EXTERNAL_7825031864601787094$$APP_SPEC_TS_1$,
- "icu_1": $I18N_EXTERNAL_2310343208266678305$$APP_SPEC_TS__3$
- });
+ var $I18N_0$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_7186042105600518133$$APP_SPEC_TS_0$ = goog.getMsg("{$icu}{$startTagSpan}{$icu_1}{$closeTagSpan}", {
+ "startTagSpan": "\uFFFD*2:1\uFFFD\uFFFD#1:1\uFFFD",
+ "closeTagSpan": "\uFFFD/#1:1\uFFFD\uFFFD/*2:1\uFFFD",
+ "icu": $I18N_1$,
+ "icu_1": $I18N_3$
+ });
+ $I18N_0$ = $MSG_EXTERNAL_7186042105600518133$$APP_SPEC_TS_0$;
+ }
+ else {
+ $I18N_0$ = $r3$.Δi18nLocalize("{$icu}{$startTagSpan}{$icu_1}{$closeTagSpan}", {
+ "startTagSpan": "\uFFFD*2:1\uFFFD\uFFFD#1:1\uFFFD",
+ "closeTagSpan": "\uFFFD/#1:1\uFFFD\uFFFD/*2:1\uFFFD",
+ "icu": $I18N_1$,
+ "icu_1": $I18N_3$
+ });
+ }
function MyComponent_span_2_Template(rf, ctx) {
if (rf & 1) {
- $r3$.Δi18nStart(0, $MSG_EXTERNAL_7186042105600518133$$APP_SPEC_TS_0$, 1);
+ $r3$.Δi18nStart(0, $I18N_0$, 1);
$r3$.Δelement(1, "span");
$r3$.Δi18nEnd();
}
@@ -2363,7 +3152,7 @@ describe('i18n support in the view compiler', () => {
template: function MyComponent_Template(rf, ctx) {
if (rf & 1) {
$r3$.ΔelementStart(0, "div");
- $r3$.Δi18nStart(1, $MSG_EXTERNAL_7186042105600518133$$APP_SPEC_TS_0$);
+ $r3$.Δi18nStart(1, $I18N_0$);
$r3$.Δtemplate(2, MyComponent_span_2_Template, 2, 2, "span", $_c2$);
$r3$.Δi18nEnd();
$r3$.ΔelementEnd();
@@ -2394,12 +3183,23 @@ describe('i18n support in the view compiler', () => {
`;
const output = String.raw `
- const $MSG_EXTERNAL_4853189513362404940$$APP_SPEC_TS_0$ = goog.getMsg("{VAR_SELECT, select, male {male {$phA}} female {female {$phB}} other {other {$phC}}}", {
- "phA": "\uFFFD1\uFFFD",
- "phB": "\uFFFD2\uFFFD",
- "phC": "\uFFFD3\uFFFD"
- });
- const $I18N_EXTERNAL_4853189513362404940$$APP_SPEC_TS_0$ = $r3$.Δi18nPostprocess($MSG_EXTERNAL_4853189513362404940$$APP_SPEC_TS_0$, {
+ var $I18N_0$;
+ if (ngI18nClosureMode) {
+ const $MSG_EXTERNAL_4853189513362404940$$APP_SPEC_TS_0$ = goog.getMsg("{VAR_SELECT, select, male {male {$phA}} female {female {$phB}} other {other {$phC}}}", {
+ "phA": "\uFFFD1\uFFFD",
+ "phB": "\uFFFD2\uFFFD",
+ "phC": "\uFFFD3\uFFFD"
+ });
+ $I18N_0$ = $MSG_EXTERNAL_4853189513362404940$$APP_SPEC_TS_0$;
+ }
+ else {
+ $I18N_0$ = $r3$.Δi18nLocalize("{VAR_SELECT, select, male {male {$phA}} female {female {$phB}} other {other {$phC}}}", {
+ "phA": "\uFFFD1\uFFFD",
+ "phB": "\uFFFD2\uFFFD",
+ "phC": "\uFFFD3\uFFFD"
+ });
+ }
+ $I18N_0$ = $r3$.Δi18nPostprocess($I18N_0$, {
"VAR_SELECT": "\uFFFD0\uFFFD"
});
…
@@ -2408,7 +3208,7 @@ describe('i18n support in the view compiler', () => {
template: function MyComponent_Template(rf, ctx) {
if (rf & 1) {
$r3$.ΔelementStart(0, "div");
- $r3$.Δi18n(1, $I18N_EXTERNAL_4853189513362404940$$APP_SPEC_TS_0$);
+ $r3$.Δi18n(1, $I18N_0$);
$r3$.ΔelementEnd();
}
if (rf & 2) {
diff --git a/packages/compiler-cli/test/ngtsc/ngtsc_spec.ts b/packages/compiler-cli/test/ngtsc/ngtsc_spec.ts
index 4659515b4a..8d29a7f2dc 100644
--- a/packages/compiler-cli/test/ngtsc/ngtsc_spec.ts
+++ b/packages/compiler-cli/test/ngtsc/ngtsc_spec.ts
@@ -1887,7 +1887,7 @@ describe('ngtsc behavioral tests', () => {
`);
env.driveMain();
const jsContents = env.getContents('test.js');
- expect(jsContents).toContain('i18n(1, MSG_EXTERNAL_8321000940098097247$$TEST_TS_0);');
+ expect(jsContents).toContain('MSG_EXTERNAL_8321000940098097247$$TEST_TS_1');
});
it('should take i18nUseExternalIds config option into account', () => {
@@ -1902,7 +1902,7 @@ describe('ngtsc behavioral tests', () => {
`);
env.driveMain();
const jsContents = env.getContents('test.js');
- expect(jsContents).toContain('i18n(1, MSG_TEST_TS_0);');
+ expect(jsContents).not.toContain('MSG_EXTERNAL_');
});
it('@Component\'s `interpolation` should override default interpolation config', () => {
diff --git a/packages/compiler/src/render3/r3_identifiers.ts b/packages/compiler/src/render3/r3_identifiers.ts
index 0c6c2f6b35..f5710111b6 100644
--- a/packages/compiler/src/render3/r3_identifiers.ts
+++ b/packages/compiler/src/render3/r3_identifiers.ts
@@ -130,6 +130,7 @@ export class Identifiers {
static i18nEnd: o.ExternalReference = {name: 'Δi18nEnd', moduleName: CORE};
static i18nApply: o.ExternalReference = {name: 'Δi18nApply', moduleName: CORE};
static i18nPostprocess: o.ExternalReference = {name: 'Δi18nPostprocess', moduleName: CORE};
+ static i18nLocalize: o.ExternalReference = {name: 'Δi18nLocalize', moduleName: CORE};
static load: o.ExternalReference = {name: 'Δload', moduleName: CORE};
diff --git a/packages/compiler/src/render3/view/i18n/util.ts b/packages/compiler/src/render3/view/i18n/util.ts
index 8ffc5dfc9a..01db12534b 100644
--- a/packages/compiler/src/render3/view/i18n/util.ts
+++ b/packages/compiler/src/render3/view/i18n/util.ts
@@ -11,19 +11,21 @@ import {toPublicName} from '../../../i18n/serializers/xmb';
import * as html from '../../../ml_parser/ast';
import {mapLiteral} from '../../../output/map_util';
import * as o from '../../../output/output_ast';
+import {Identifiers as R3} from '../../r3_identifiers';
/* Closure variables holding messages must be named `MSG_[A-Z0-9]+` */
const CLOSURE_TRANSLATION_PREFIX = 'MSG_';
-const CLOSURE_TRANSLATION_MATCHER_REGEXP = new RegExp(`^${CLOSURE_TRANSLATION_PREFIX}`);
/* Prefix for non-`goog.getMsg` i18n-related vars */
-const TRANSLATION_PREFIX = 'I18N_';
-
+export const TRANSLATION_PREFIX = 'I18N_';
/** Closure uses `goog.getMsg(message)` to lookup translations */
const GOOG_GET_MSG = 'goog.getMsg';
+/** Name of the global variable that is used to determine if we use Closure translations or not */
+const NG_I18N_CLOSURE_MODE = 'ngI18nClosureMode';
+
/** I18n separators for metadata **/
const I18N_MEANING_SEPARATOR = '|';
const I18N_ID_SEPARATOR = '@@';
@@ -48,17 +50,36 @@ export type I18nMeta = {
};
function i18nTranslationToDeclStmt(
- variable: o.ReadVarExpr, message: string,
- params?: {[name: string]: o.Expression}): o.DeclareVarStmt {
+ variable: o.ReadVarExpr, closureVar: o.ReadVarExpr, message: string, meta: I18nMeta,
+ params?: {[name: string]: o.Expression}): o.Statement[] {
+ const statements: o.Statement[] = [];
+ // var I18N_X;
+ statements.push(
+ new o.DeclareVarStmt(variable.name !, undefined, o.INFERRED_TYPE, null, variable.sourceSpan));
+
const args = [o.literal(message) as o.Expression];
if (params && Object.keys(params).length) {
args.push(mapLiteral(params, true));
}
- const fnCall = o.variable(GOOG_GET_MSG).callFn(args);
- return variable.set(fnCall).toDeclStmt(o.INFERRED_TYPE, [o.StmtModifier.Final]);
+
+ // Closure JSDoc comments
+ const docStatements = i18nMetaToDocStmt(meta);
+ const thenStatements: o.Statement[] = docStatements ? [docStatements] : [];
+ const googFnCall = o.variable(GOOG_GET_MSG).callFn(args);
+ // const MSG_... = goog.getMsg(..);
+ thenStatements.push(closureVar.set(googFnCall).toConstDecl());
+ // I18N_X = MSG_...;
+ thenStatements.push(new o.ExpressionStatement(variable.set(closureVar)));
+ const localizeFnCall = o.importExpr(R3.i18nLocalize).callFn(args);
+ // I18N_X = i18nLocalize(...);
+ const elseStatements = [new o.ExpressionStatement(variable.set(localizeFnCall))];
+ // if(ngI18nClosureMode) { ... } else { ... }
+ statements.push(o.ifStmt(o.variable(NG_I18N_CLOSURE_MODE), thenStatements, elseStatements));
+
+ return statements;
}
-// Converts i18n meta informations for a message (id, description, meaning)
+// Converts i18n meta information for a message (id, description, meaning)
// to a JsDoc statement formatted as expected by the Closure compiler.
function i18nMetaToDocStmt(meta: I18nMeta): o.JSDocCommentStmt|null {
const tags: o.JSDocTag[] = [];
@@ -231,6 +252,7 @@ export function getTranslationConstPrefix(extra: string): string {
* Generates translation declaration statements.
*
* @param variable Translation value reference
+ * @param closureVar Variable for Closure `goog.getMsg` calls
* @param message Text message to be translated
* @param meta Object that contains meta information (id, meaning and description)
* @param params Object with placeholders key-value pairs
@@ -238,27 +260,16 @@ export function getTranslationConstPrefix(extra: string): string {
* @returns Array of Statements that represent a given translation
*/
export function getTranslationDeclStmts(
- variable: o.ReadVarExpr, message: string, meta: I18nMeta,
+ variable: o.ReadVarExpr, closureVar: o.ReadVarExpr, message: string, meta: I18nMeta,
params: {[name: string]: o.Expression} = {},
transformFn?: (raw: o.ReadVarExpr) => o.Expression): o.Statement[] {
const statements: o.Statement[] = [];
- const docStatements = i18nMetaToDocStmt(meta);
- if (docStatements) {
- statements.push(docStatements);
- }
+
+ statements.push(...i18nTranslationToDeclStmt(variable, closureVar, message, meta, params));
+
if (transformFn) {
- statements.push(i18nTranslationToDeclStmt(variable, message, params));
-
- // Closure Compiler doesn't allow non-goo.getMsg const names to start with `MSG_`,
- // so we update variable name prefix in case post processing is required, so we can
- // assign the result of post-processing function to the var that starts with `I18N_`
- const raw = o.variable(variable.name !);
- variable.name = variable.name !.replace(CLOSURE_TRANSLATION_MATCHER_REGEXP, TRANSLATION_PREFIX);
-
- statements.push(
- variable.set(transformFn(raw)).toDeclStmt(o.INFERRED_TYPE, [o.StmtModifier.Final]));
- } else {
- statements.push(i18nTranslationToDeclStmt(variable, message, params));
+ statements.push(new o.ExpressionStatement(variable.set(transformFn(variable))));
}
+
return statements;
-}
\ No newline at end of file
+}
diff --git a/packages/compiler/src/render3/view/template.ts b/packages/compiler/src/render3/view/template.ts
index 01ea23e9ea..29ae26e732 100644
--- a/packages/compiler/src/render3/view/template.ts
+++ b/packages/compiler/src/render3/view/template.ts
@@ -35,7 +35,7 @@ import {prepareSyntheticListenerFunctionName, prepareSyntheticListenerName, prep
import {I18nContext} from './i18n/context';
import {I18nMetaVisitor} from './i18n/meta';
import {getSerializedI18nContent} from './i18n/serializer';
-import {I18N_ICU_MAPPING_PREFIX, assembleBoundTextPlaceholders, assembleI18nBoundString, formatI18nPlaceholderName, getTranslationConstPrefix, getTranslationDeclStmts, icuFromI18nMessage, isI18nRootNode, isSingleI18nIcu, metaFromI18nMessage, placeholdersToParams, wrapI18nPlaceholder} from './i18n/util';
+import {I18N_ICU_MAPPING_PREFIX, TRANSLATION_PREFIX, assembleBoundTextPlaceholders, assembleI18nBoundString, formatI18nPlaceholderName, getTranslationConstPrefix, getTranslationDeclStmts, icuFromI18nMessage, isI18nRootNode, isSingleI18nIcu, metaFromI18nMessage, placeholdersToParams, wrapI18nPlaceholder} from './i18n/util';
import {Instruction, StylingBuilder} from './styling_builder';
import {CONTEXT_NAME, IMPLICIT_REFERENCE, NON_BINDABLE_ATTR, REFERENCE_PREFIX, RENDER_FLAGS, asLiteral, getAttrsForDirectiveMatching, invalid, trimTrailingNulls, unsupported} from './util';
@@ -321,14 +321,18 @@ export class TemplateDefinitionBuilder implements t.Visitor
, LocalResolver
i18nTranslate(
message: i18n.Message, params: {[name: string]: o.Expression} = {}, ref?: o.ReadVarExpr,
transformFn?: (raw: o.ReadVarExpr) => o.Expression): o.ReadVarExpr {
- const _ref = ref || this.i18nAllocateRef(message.id);
+ const _ref = ref || o.variable(this.constantPool.uniqueName(TRANSLATION_PREFIX));
+ // Closure Compiler requires const names to start with `MSG_` but disallows any other const to
+ // start with `MSG_`. We define a variable starting with `MSG_` just for the `goog.getMsg` call
+ const closureVar = this.i18nGenerateClosureVar(message.id);
const _params: {[key: string]: any} = {};
if (params && Object.keys(params).length) {
Object.keys(params).forEach(key => _params[formatI18nPlaceholderName(key)] = params[key]);
}
const meta = metaFromI18nMessage(message);
const content = getSerializedI18nContent(message);
- const statements = getTranslationDeclStmts(_ref, content, meta, _params, transformFn);
+ const statements =
+ getTranslationDeclStmts(_ref, closureVar, content, meta, _params, transformFn);
this.constantPool.statements.push(...statements);
return _ref;
}
@@ -360,7 +364,7 @@ export class TemplateDefinitionBuilder implements t.Visitor, LocalResolver
return bound;
}
- i18nAllocateRef(messageId: string): o.ReadVarExpr {
+ i18nGenerateClosureVar(messageId: string): o.ReadVarExpr {
let name: string;
const suffix = this.fileBasedI18nSuffix.toUpperCase();
if (this.i18nUseExternalIds) {
@@ -424,7 +428,7 @@ export class TemplateDefinitionBuilder implements t.Visitor, LocalResolver
if (this.i18nContext) {
this.i18n = this.i18nContext.forkChildContext(index, this.templateIndex !, meta);
} else {
- const ref = this.i18nAllocateRef((meta as i18n.Message).id);
+ const ref = o.variable(this.constantPool.uniqueName(TRANSLATION_PREFIX));
this.i18n = new I18nContext(index, ref, 0, this.templateIndex, meta);
}
diff --git a/packages/core/src/core_render3_private_export.ts b/packages/core/src/core_render3_private_export.ts
index 784344424b..e3474e53ad 100644
--- a/packages/core/src/core_render3_private_export.ts
+++ b/packages/core/src/core_render3_private_export.ts
@@ -134,6 +134,8 @@ export {
Δi18nEnd,
Δi18nApply,
Δi18nPostprocess,
+ i18nConfigureLocalize as ɵi18nConfigureLocalize,
+ Δi18nLocalize,
setClassMetadata as ɵsetClassMetadata,
ΔresolveWindow,
ΔresolveDocument,
diff --git a/packages/core/src/render3/i18n.ts b/packages/core/src/render3/i18n.ts
index 1a85d25f52..7951220236 100644
--- a/packages/core/src/render3/i18n.ts
+++ b/packages/core/src/render3/i18n.ts
@@ -6,6 +6,8 @@
* found in the LICENSE file at https://angular.io/license
*/
+import '../util/ng_i18n_closure_mode';
+
import {SRCSET_ATTRS, URI_ATTRS, VALID_ATTRS, VALID_ELEMENTS, getTemplateContent} from '../sanitization/html_sanitizer';
import {InertBodyHelper} from '../sanitization/inert_body';
import {_sanitizeUrl, sanitizeSrcset} from '../sanitization/url_sanitizer';
@@ -1604,3 +1606,38 @@ function parseNodes(
}
}
}
+
+let TRANSLATIONS: {[key: string]: string} = {};
+export interface I18nLocalizeOptions { translations: {[key: string]: string}; }
+
+/**
+ * Set the configuration for `i18nLocalize`.
+ *
+ * @deprecated this method is temporary & should not be used as it will be removed soon
+ */
+export function i18nConfigureLocalize(options: I18nLocalizeOptions = {
+ translations: {}
+}) {
+ TRANSLATIONS = options.translations;
+}
+
+const LOCALIZE_PH_REGEXP = /\{\$(.*?)\}/g;
+
+/**
+ * A goog.getMsg-like function for users that do not use Closure.
+ *
+ * This method is required as a *temporary* measure to prevent i18n tests from being blocked while
+ * running outside of Closure Compiler. This method will not be needed once runtime translation
+ * service support is introduced.
+ *
+ * @publicApi
+ * @deprecated this method is temporary & should not be used as it will be removed soon
+ */
+export function Δi18nLocalize(input: string, placeholders: {[key: string]: string} = {}) {
+ if (typeof TRANSLATIONS[input] !== 'undefined') { // to account for empty string
+ input = TRANSLATIONS[input];
+ }
+ return Object.keys(placeholders).length ?
+ input.replace(LOCALIZE_PH_REGEXP, (match, key) => placeholders[key] || '') :
+ input;
+}
diff --git a/packages/core/src/render3/index.ts b/packages/core/src/render3/index.ts
index 184806bf51..c658822b77 100644
--- a/packages/core/src/render3/index.ts
+++ b/packages/core/src/render3/index.ts
@@ -107,6 +107,8 @@ export {
Δi18nEnd,
Δi18nApply,
Δi18nPostprocess,
+ i18nConfigureLocalize,
+ Δi18nLocalize,
} from './i18n';
export {NgModuleFactory, NgModuleRef, NgModuleType} from './ng_module_ref';
diff --git a/packages/core/src/render3/jit/environment.ts b/packages/core/src/render3/jit/environment.ts
index fc99c611f9..bb4c88506b 100644
--- a/packages/core/src/render3/jit/environment.ts
+++ b/packages/core/src/render3/jit/environment.ts
@@ -117,6 +117,7 @@ export const angularCoreEnv: {[name: string]: Function} = {
'Δi18nEnd': r3.Δi18nEnd,
'Δi18nApply': r3.Δi18nApply,
'Δi18nPostprocess': r3.Δi18nPostprocess,
+ 'Δi18nLocalize': r3.Δi18nLocalize,
'ΔresolveWindow': r3.ΔresolveWindow,
'ΔresolveDocument': r3.ΔresolveDocument,
'ΔresolveBody': r3.ΔresolveBody,
diff --git a/packages/core/src/util/ng_dev_mode.ts b/packages/core/src/util/ng_dev_mode.ts
index 4444881395..3b5c9308be 100644
--- a/packages/core/src/util/ng_dev_mode.ts
+++ b/packages/core/src/util/ng_dev_mode.ts
@@ -6,6 +6,8 @@
* found in the LICENSE file at https://angular.io/license
*/
+import {global} from './global';
+
declare global {
const ngDevMode: null|NgDevModePerfCounters;
interface NgDevModePerfCounters {
@@ -38,8 +40,6 @@ declare global {
}
}
-declare let global: any;
-
export function ngDevModeResetPerfCounters(): NgDevModePerfCounters {
const newCounters: NgDevModePerfCounters = {
firstTemplatePass: 0,
@@ -69,31 +69,20 @@ export function ngDevModeResetPerfCounters(): NgDevModePerfCounters {
stylingApply: 0,
stylingApplyCacheMiss: 0,
};
- // NOTE: Under Ivy we may have both window & global defined in the Node
- // environment since ensureDocument() in render3.ts sets global.window.
- if (typeof window != 'undefined') {
- // Make sure to refer to ngDevMode as ['ngDevMode'] for closure.
- (window as any)['ngDevMode'] = newCounters;
- }
- if (typeof global != 'undefined') {
- // Make sure to refer to ngDevMode as ['ngDevMode'] for closure.
- (global as any)['ngDevMode'] = newCounters;
- }
- if (typeof self != 'undefined') {
- // Make sure to refer to ngDevMode as ['ngDevMode'] for closure.
- (self as any)['ngDevMode'] = newCounters;
- }
+
+ // Make sure to refer to ngDevMode as ['ngDevMode'] for closure.
+ global['ngDevMode'] = newCounters;
return newCounters;
}
/**
* This checks to see if the `ngDevMode` has been set. If yes,
- * than we honor it, otherwise we default to dev mode with additional checks.
+ * then we honor it, otherwise we default to dev mode with additional checks.
*
* The idea is that unless we are doing production build where we explicitly
* set `ngDevMode == false` we should be helping the developer by providing
* as much early warning and errors as possible.
*/
-if (typeof ngDevMode === 'undefined' || ngDevMode) {
+if (typeof global['ngDevMode'] === 'undefined' || global['ngDevMode']) {
ngDevModeResetPerfCounters();
}
diff --git a/packages/core/src/util/ng_i18n_closure_mode.ts b/packages/core/src/util/ng_i18n_closure_mode.ts
new file mode 100644
index 0000000000..8defa1ce58
--- /dev/null
+++ b/packages/core/src/util/ng_i18n_closure_mode.ts
@@ -0,0 +1,19 @@
+/**
+ * @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 {global} from './global';
+
+declare global {
+ const ngI18nClosureMode: boolean;
+}
+
+if (typeof global['ngI18nClosureMode'] === 'undefined') {
+ // Make sure to refer to ngI18nClosureMode as ['ngI18nClosureMode'] for closure.
+ global['ngI18nClosureMode'] =
+ typeof global['goog'] !== 'undefined' && typeof global['goog'].getMsg === 'function';
+}
diff --git a/packages/core/test/acceptance/view_container_ref_spec.ts b/packages/core/test/acceptance/view_container_ref_spec.ts
index 1e921e55fc..aea65fc1c5 100644
--- a/packages/core/test/acceptance/view_container_ref_spec.ts
+++ b/packages/core/test/acceptance/view_container_ref_spec.ts
@@ -6,10 +6,10 @@
* found in the LICENSE file at https://angular.io/license
*/
-import {Component, Directive, NO_ERRORS_SCHEMA, QueryList, TemplateRef, ViewChild, ViewChildren, ViewContainerRef} from '@angular/core';
+import {Component, Directive, NO_ERRORS_SCHEMA, QueryList, TemplateRef, ViewChild, ViewChildren, ViewContainerRef, ɵi18nConfigureLocalize} from '@angular/core';
import {TestBed} from '@angular/core/testing';
import {expect} from '@angular/platform-browser/testing/src/matchers';
-import {ivyEnabled, onlyInIvy, polyfillGoogGetMsg} from '@angular/private/testing';
+import {ivyEnabled, onlyInIvy} from '@angular/private/testing';
describe('ViewContainerRef', () => {
@@ -22,7 +22,7 @@ describe('ViewContainerRef', () => {
};
beforeEach(() => {
- polyfillGoogGetMsg(TRANSLATIONS);
+ ɵi18nConfigureLocalize({translations: TRANSLATIONS});
TestBed.configureTestingModule(
{declarations: [StructDir, ViewContainerRefComp, ViewContainerRefApp, DestroyCasesComp]});
});
diff --git a/packages/core/test/bundling/hello_world_i18n/index.html b/packages/core/test/bundling/hello_world_i18n/index.html
index e846acca41..873edace4d 100644
--- a/packages/core/test/bundling/hello_world_i18n/index.html
+++ b/packages/core/test/bundling/hello_world_i18n/index.html
@@ -23,14 +23,6 @@
property renaming.
-->