translateElement(element) {
    const name = element.getAttribute('data-l10n-with');

    let l10n;
    if (!name || name === 'main') {
      l10n = this;
    } else if (this.delegates.has(name)) {
      l10n = this.delegates.get(name);
    } else {
      const err = new L10nError(`Unknown Localization: ${name}.`);
      return Promise.reject(err);
    }

    return l10n.formatEntities([l10n.getKeysForElement(element)]).then(
      translations => l10n.applyTranslations([element], translations)
    );
  }
Translate a single DOM element asynchronously using this
`DocumentLocalization` or any `DOMLocalization` objects which it can
delegate to.

If `element` uses `data-l10n-with`, the specific named `DOMLocalization`
will be used to translate it.  As a special case, an element without
`data-l10n-with` will be localized using this `DocumentLocalization` (as
if it had `data-l10n-with="main"`).

Returns a `Promise` that gets resolved once the translation is complete.

@param   {Element} element - HTML element to be translated
@returns {Promise}