static mi18n(lookup, args) {
    const def = this.definition
    let i18n = def.i18n || {}
    const locale = mi18n.locale
    i18n = i18n[locale] || i18n.default || i18n
    const lookupCamel = this.camelCase(lookup)

    // if translation is defined in the control, return it
    const value = typeof i18n == 'object' ? i18n[lookupCamel] || i18n[lookup] : i18n
    if (value) {
      return value
    }

    // otherwise check the mi18n object - allow for mapping a lookup to a custom mi18n lookup
    let mapped = def.mi18n
    if (typeof mapped === 'object') {
      mapped = mapped[lookupCamel] || mapped[lookup]
    }
    if (!mapped) {
      mapped = lookupCamel
    }
    return mi18n.get(mapped, args)
  }
Retrieve a translated string
By default looks for translations defined against the class (for plugin controls)
Expects {locale1: {type: label}, locale2: {type: label}}, or {default: label}, or {local1: label, local2: label2}
@param {String} lookup string to retrieve the label / translated string for
@param {Object|Number|String} [args] - string or key/val pairs for string lookups with variables
@return {String} the translated label