docs: function i18nApply(startIndex, instructions) {
      var viewData = getViewData();
      if (ngDevMode) {
          assertEqual(viewData[BINDING_INDEX], -1, 'i18nApply should be called before any binding');
      }
      if (!instructions) {
          return;
      }
      var renderer = getRenderer();
      var localParentNode = getParentLNode(load(startIndex)) || getPreviousOrParentNode();
      var localPreviousNode = localParentNode;
      resetApplicationState(); // We don't want to add to the tree with the wrong previous node
      for (var i = 0; i < instructions.length; i++) {
          var instruction = instructions[i];
          switch (instruction & -536870912 /* InstructionMask */) {
              case 1073741824 /* Element */:
                  var element$$1 = load(instruction & 536870911 /* IndexMask */);
                  localPreviousNode = appendI18nNode(element$$1, localParentNode, localPreviousNode);
                  localParentNode = element$$1;
                  break;
              case 1610612736 /* Expression */:
              case -2147483648 /* TemplateRoot */:
              case -1610612736 /* Any */:
                  var node = load(instruction & 536870911 /* IndexMask */);
                  localPreviousNode = appendI18nNode(node, localParentNode, localPreviousNode);
                  break;
              case 536870912 /* Text */:
                  if (ngDevMode) {
                      ngDevMode.rendererCreateTextNode++;
                  }
                  var value = instructions[++i];
                  var textRNode = createTextNode(value, renderer);
                  // If we were to only create a `RNode` then projections won't move the text.
                  // Create text node at the current end of viewData. Must subtract header offset because
                  // createLNode takes a raw index (not adjusted by header offset).
                  var textLNode = createLNode(viewData.length - HEADER_OFFSET, 3 /* Element */, textRNode, null, null);
                  localPreviousNode = appendI18nNode(textLNode, localParentNode, localPreviousNode);
                  resetApplicationState();
                  break;
              case -1073741824 /* CloseNode */:
                  localPreviousNode = localParentNode;
                  localParentNode = getParentLNode(localParentNode);
                  break;
              case -536870912 /* RemoveNode */:
                  if (ngDevMode) {
                      ngDevMode.rendererRemoveNode++;
                  }
                  var index = instruction & 536870911 /* IndexMask */;
                  var removedNode = load(index);
                  var parentNode = getParentLNode(removedNode);
                  removeChild(parentNode, removedNode.native || null, viewData);
                  // For template containers we also need to remove their `ViewContainerRef` from the DOM
                  if (removedNode.tNode.type === 0 /* Container */ && removedNode.dynamicLContainerNode) {
                      removeChild(parentNode, removedNode.dynamicLContainerNode.native || null, viewData);
                      removedNode.dynamicLContainerNode.tNode.detached = true;
                      removedNode.dynamicLContainerNode.data[RENDER_PARENT] = null;
                  }
                  break;
          }
      }
  }