diff --git a/packages/core/src/render3/i18n.ts b/packages/core/src/render3/i18n.ts
index 3349450dce..60ec580fe2 100644
--- a/packages/core/src/render3/i18n.ts
+++ b/packages/core/src/render3/i18n.ts
@@ -649,16 +649,14 @@ function i18nEndFirstPass(tView: TView) {
const tI18n = tView.data[rootIndex + HEADER_OFFSET] as TI18n;
ngDevMode && assertDefined(tI18n, `You should call i18nStart before i18nEnd`);
- // The last placeholder that was added before `i18nEnd`
- const previousOrParentTNode = getPreviousOrParentTNode();
- const visitedNodes = readCreateOpCodes(rootIndex, tI18n.create, tI18n.icus, viewData);
-
// Find the last node that was added before `i18nEnd`
- let lastCreatedNode = previousOrParentTNode;
+ let lastCreatedNode = getPreviousOrParentTNode();
if (lastCreatedNode.child) {
lastCreatedNode = findLastNode(lastCreatedNode.child);
}
+ const visitedNodes = readCreateOpCodes(rootIndex, tI18n.create, tI18n.icus, viewData);
+
// Remove deleted nodes
for (let i = rootIndex + 1; i <= lastCreatedNode.index - HEADER_OFFSET; i++) {
if (visitedNodes.indexOf(i) === -1) {
@@ -719,7 +717,6 @@ function readCreateOpCodes(
currentTNode !,
`You need to create or select a node before you can insert it into the DOM`);
previousTNode = appendI18nNode(currentTNode !, destinationTNode, previousTNode);
- destinationTNode.next = null;
break;
case I18nMutateOpCode.Select:
const nodeIndex = opCode >>> I18nMutateOpCode.SHIFT_REF;
diff --git a/packages/core/test/i18n_integration_spec.ts b/packages/core/test/i18n_integration_spec.ts
index e04bc596e0..e89b15139c 100644
--- a/packages/core/test/i18n_integration_spec.ts
+++ b/packages/core/test/i18n_integration_spec.ts
@@ -610,4 +610,15 @@ onlyInIvy('Ivy i18n logic').describe('i18n', function() {
.toEqual(`