Recently we upgraded to Gulp 4. However, the following things still need to be addressed in some way:

- If a task series is executed with an anonymous function inside it, we'll see `Starting '<anonymous>'` in the output, which isn't that great. We need to either suppress it or use named functions.
- If a task is private, it should be hidden in some way. For example, `gh-pages-prepare` is only used in the public `web` target and should not be used on its own, however currently it shows in the default `gulp` output since it's a regular task. Perhaps we should mark them with an underscore?
const { AppOptions, OptionKind } = require("./" +
    DEFAULT_PREFERENCES_DIR +
    dir +
    "web/app_options.js");
  return AppOptions.getAll(OptionKind.PREFERENCE);
}
gulp.task("locale", function () {
  const VIEWER_LOCALE_OUTPUT = "web/locale/";
  console.log();
  console.log("### Building localization files");
  rimraf.sync(VIEWER_LOCALE_OUTPUT);
  mkdirp.sync(VIEWER_LOCALE_OUTPUT);
  const subfolders = fs.readdirSync(L10N_DIR);
  subfolders.sort();
  let viewerOutput = "";
  const locales = [];
  for (let i = 0; i < subfolders.length; i++) {
    const locale = subfolders[i];
    const dirPath = L10N_DIR + locale;
    if (!checkDir(dirPath)) {
      continue;
    }
    if (!/^[a-z][a-z]([a-z])?(-[A-Z][A-Z])?$/.test(locale)) {
      console.log("Skipping invalid locale: " + locale);
      continue;