code: function i18nMapping(translation, elements, expressions, templateRoots, lastChildIndex) {
      var translationParts = translation.split(i18nTagRegex);
      var nbTemplates = templateRoots ? templateRoots.length + 1 : 1;
      var instructions = (new Array(nbTemplates)).fill(undefined);
      generateMappingInstructions(0, 0, translationParts, instructions, elements, expressions, templateRoots, lastChildIndex);
      return instructions;
  }
docs: Takes a translation string, the initial list of placeholders (elements and expressions) and the
  indexes of their corresponding expression nodes to return a list of instructions for each
  template function.
  
  Because embedded templates have different indexes for each placeholder, each parameter (except
  the translation) is an array, where each value corresponds to a different template, by order of
  appearance.
  
  @param translation A translation string where placeholders are represented by `{$name}`
  @param elements An array containing, for each template, the maps of element placeholders and
  their indexes.
  @param expressions An array containing, for each template, the maps of expression placeholders
  and their indexes.
  @param templateRoots An array of template roots whose content should be ignored when
  generating the instructions for their parent template.
  @param lastChildIndex The index of the last child of the i18n node. Used when the i18n block is
  an ng-container.
  
  @returns A list of instructions used to translate each template.