mirror of
https://github.com/angular/angular
synced 2026-05-24 09:28:37 +00:00
This commit updates the code to move generated i18n statements into the `consts` field of
ComponentDef to avoid invoking `$localize` function before component initialization (to better
support runtime translations) and also avoid problems with lazy-loading when i18n defs may not
be present in a chunk where it's referenced.
Prior to this change the i18n statements were generated at the top leve:
```
var I18N_0;
if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
var MSG_X = goog.getMsg(“…”);
I18N_0 = MSG_X;
} else {
I18N_0 = $localize('...');
}
defineComponent({
// ...
template: function App_Template(rf, ctx) {
i0.ɵɵi18n(2, I18N_0);
}
});
```
This commit updates the logic to generate the following code instead:
```
defineComponent({
// ...
consts: function() {
var I18N_0;
if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) {
var MSG_X = goog.getMsg(“…”);
I18N_0 = MSG_X;
} else {
I18N_0 = $localize('...');
}
return [
I18N_0
];
},
template: function App_Template(rf, ctx) {
i0.ɵɵi18n(2, 0);
}
});
```
Also note that i18n template instructions now refer to the `consts` array using an index
(similar to other template instructions).
PR Close #38404
|
||
|---|---|---|
| .. | ||
| BUILD.bazel | ||
| mock_compile.ts | ||
| mock_compiler_spec.ts | ||
| r3_compiler_compliance_spec.ts | ||
| r3_view_compiler_binding_spec.ts | ||
| r3_view_compiler_di_spec.ts | ||
| r3_view_compiler_directives_spec.ts | ||
| r3_view_compiler_i18n_spec.ts | ||
| r3_view_compiler_input_outputs_spec.ts | ||
| r3_view_compiler_listener_spec.ts | ||
| r3_view_compiler_providers_spec.ts | ||
| r3_view_compiler_spec.ts | ||
| r3_view_compiler_styling_spec.ts | ||
| r3_view_compiler_template_spec.ts | ||
| README.md | ||
Tests in this directory should be run with:
yarn bazel test --config=ivy packages/compiler-cli/test/compliance:compliance