fetchI18nBundle = async packageName => {
    const language = (0, _getLocale.default)().getLanguage();
    const region = (0, _getLocale.default)().getRegion();
    let localeId = language + (region ? `-${region}` : ``);
    if (useFallbackBundle(packageName, localeId)) {
      localeId = (0, _normalizeLocale.default)(localeId);
      while (useFallbackBundle(packageName, localeId)) {
        localeId = (0, _nextFallbackLocale.default)(localeId);
      }
    }
    // use default language unless configured to always fetch it from the network
    const fetchDefaultLanguage = (0, _Language.getFetchDefaultLanguage)();
    if (localeId === _AssetParameters.DEFAULT_LANGUAGE && !fetchDefaultLanguage) {
      _setI18nBundleData(packageName, null); // reset for the default language (if data was set for a previous language)
      return;
    }
    if (!_hasLoader(packageName, localeId)) {
      _showAssetsWarningOnce(packageName);
      return;
    }
    try {
      const data = await _loadMessageBundleOnce(packageName, localeId);
      _setI18nBundleData(packageName, data);
    } catch (error) {
      const e = error;
      if (!reportedErrors.has(e.message)) {
        reportedErrors.add(e.message);
        console.error(e.message); /* eslint-disable-line */
      }
    }
  }
This method preforms the asynchronous task of fetching the actual text resources. It will fetch
each text resource over the network once (even for multiple calls to the same method).
It should be fully finished before the i18nBundle class is created in the webcomponents.
This method uses the bundle URLs that are populated by the <code>registerI18nBundle</code> method.
To simplify the usage, the synchronization of both methods happens internally for the same <code>bundleId</code>
@param {packageName} packageName the NPM package name
@public