changeLocale(locales) {
    const Class = shaka.ui.Localization;

    // Normalize the locale so that matching will be easier. We need to reset
    // our internal set of locales so that we have the same order as the new
    // set.
    this.currentLocales_.clear();
    for (const locale of locales) {
      this.currentLocales_.add(shaka.util.LanguageUtils.normalize(locale));
    }

    this.updateCurrentMap_();

    // Check if we have support for the exact locale requested. Even through we
    // will do our best to return the most relevant results, we need to tell
    // app that some data may be missing.
    const missing = shaka.util.Iterables.filter(
        this.currentLocales_,
        (locale) => !this.localizations_.has(locale));

    if (missing.length) {
      this.dispatchEvent(new shaka.util.FakeEvent(
          Class.UNKNOWN_LOCALES,
          (new Map()).set('locales', missing)));
    }

    const found = shaka.util.Iterables.filter(
        this.currentLocales_,
        (locale) => this.localizations_.has(locale));

    const data = (new Map()).set(
        'locales', found.length ? found : [this.fallbackLocale_]);
    this.dispatchEvent(new shaka.util.FakeEvent(
        Class.LOCALE_CHANGED,
        data));
  }
Request the localization system to change which locale it serves. If any of
of the preferred locales cannot be found, the localization system will fire
an event identifying which locales it does not know. The localization
system will then continue to operate using the closest matches it has.

@param {!Iterable<string>} locales
   The locale codes for the requested locales in order of preference.
@export