docs: function generateAllLocalesFile(LOCALES, ALIASES) {
    const existingLocalesAliases = {};
    const existingLocalesData = {};
  
    // for each locale, get the data and the list of equivalent locales
    LOCALES.forEach(locale => {
      const eqLocales = new Set();
      eqLocales.add(locale);
      if (locale.match(/-/)) {
        eqLocales.add(locale.replace(/-/g, '_'));
      }
  
      // check for aliases
      const alias = ALIASES[locale];
      if (alias) {
        eqLocales.add(alias);
  
        if (alias.match(/-/)) {
          eqLocales.add(alias.replace(/-/g, '_'));
        }
  
        // to avoid duplicated "case" we regroup all locales in the same "case"
        // the simplest way to do that is to have alias aliases
        // e.g. 'no' --> 'nb', 'nb' --> 'no-NO'
        // which means that we'll have 'no', 'nb' and 'no-NO' in the same "case"
        const aliasKeys = Object.keys(ALIASES);
        for (let i = 0; i < aliasKeys.length; i++) {
          const aliasValue = ALIASES[alias];
          if (aliasKeys.indexOf(alias) !== -1 && !eqLocales.has(aliasValue)) {
            eqLocales.add(aliasValue);
  
            if (aliasValue.match(/-/)) {
              eqLocales.add(aliasValue.replace(/-/g, '_'));
            }
          }
        }
      }
  
      for (let l of eqLocales) {
        // find the existing content file
        const path = `${RELATIVE_I18N_DATA_FOLDER}/${l}.ts`;
        if (fs.existsSync(`${RELATIVE_I18N_DATA_FOLDER}/${l}.ts`)) {
          const localeName = formatLocale(locale);
          existingLocalesData[locale] =
              fs.readFileSync(path, 'utf8')
                  .replace(`${HEADER}\n`, '')
                  .replace('export default ', `export const locale_${localeName} = `)
                  .replace('function plural', `function plural_${localeName}`)
                  .replace(/,(\n  | )plural/, `, plural_${localeName}`)
                  .replace('const u = undefined;\n\n', '');
        }
      }
  
      existingLocalesAliases[locale] = eqLocales;
    });
  
    function generateCases(locale) {
      let str = '';
      let locales = [];
      const eqLocales = existingLocalesAliases[locale];
      for (let l of eqLocales) {
        str += `case '${l}':\n`;
        locales.push(`'${l}'`);
      }
      let localesStr = '[' + locales.join(',') + ']';
  
      str += `  l = locale_${formatLocale(locale)};
      locales = ${localesStr};
      break;\n`;
      return str;
    }
  
    function formatLocale(locale) { return locale.replace(/-/g, '_'); }
    // clang-format off
    return `${HEADER}
  import {registerLocaleData} from '../src/i18n/locale_data';
  
  const u = undefined;
  
  ${LOCALES.map(locale => `${existingLocalesData[locale]}`).join('\n')}
  
  let l: any;
  let locales: string[] = [];
  
  switch (goog.LOCALE) {
  ${LOCALES.map(locale => generateCases(locale)).join('')}}
  
  if(l) {
    locales.forEach(locale => registerLocaleData(l, locale));
  }
  `;
    // clang-format on
  }