{"ast":null,"code":"const consoleLogger = {\n  type: 'logger',\n  log(args) {\n    this.output('log', args);\n  },\n  warn(args) {\n    this.output('warn', args);\n  },\n  error(args) {\n    this.output('error', args);\n  },\n  output(type, args) {\n    if (console && console[type]) console[type].apply(console, args);\n  }\n};\nclass Logger {\n  constructor(concreteLogger) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    this.init(concreteLogger, options);\n  }\n  init(concreteLogger) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    this.prefix = options.prefix || 'i18next:';\n    this.logger = concreteLogger || consoleLogger;\n    this.options = options;\n    this.debug = options.debug;\n  }\n  log() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    return this.forward(args, 'log', '', true);\n  }\n  warn() {\n    for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      args[_key2] = arguments[_key2];\n    }\n    return this.forward(args, 'warn', '', true);\n  }\n  error() {\n    for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n      args[_key3] = arguments[_key3];\n    }\n    return this.forward(args, 'error', '');\n  }\n  deprecate() {\n    for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n      args[_key4] = arguments[_key4];\n    }\n    return this.forward(args, 'warn', 'WARNING DEPRECATED: ', true);\n  }\n  forward(args, lvl, prefix, debugOnly) {\n    if (debugOnly && !this.debug) return null;\n    if (typeof args[0] === 'string') args[0] = \"\".concat(prefix).concat(this.prefix, \" \").concat(args[0]);\n    return this.logger[lvl](args);\n  }\n  create(moduleName) {\n    return new Logger(this.logger, {\n      ...{\n        prefix: \"\".concat(this.prefix, \":\").concat(moduleName, \":\")\n      },\n      ...this.options\n    });\n  }\n  clone(options) {\n    options = options || this.options;\n    options.prefix = options.prefix || this.prefix;\n    return new Logger(this.logger, options);\n  }\n}\nvar baseLogger = new Logger();\nclass EventEmitter {\n  constructor() {\n    this.observers = {};\n  }\n  on(events, listener) {\n    events.split(' ').forEach(event => {\n      if (!this.observers[event]) this.observers[event] = new Map();\n      const numListeners = this.observers[event].get(listener) || 0;\n      this.observers[event].set(listener, numListeners + 1);\n    });\n    return this;\n  }\n  off(event, listener) {\n    if (!this.observers[event]) return;\n    if (!listener) {\n      delete this.observers[event];\n      return;\n    }\n    this.observers[event].delete(listener);\n  }\n  emit(event) {\n    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n    if (this.observers[event]) {\n      const cloned = Array.from(this.observers[event].entries());\n      cloned.forEach(_ref => {\n        let [observer, numTimesAdded] = _ref;\n        for (let i = 0; i < numTimesAdded; i++) {\n          observer(...args);\n        }\n      });\n    }\n    if (this.observers['*']) {\n      const cloned = Array.from(this.observers['*'].entries());\n      cloned.forEach(_ref2 => {\n        let [observer, numTimesAdded] = _ref2;\n        for (let i = 0; i < numTimesAdded; i++) {\n          observer.apply(observer, [event, ...args]);\n        }\n      });\n    }\n  }\n}\nfunction defer() {\n  let res;\n  let rej;\n  const promise = new Promise((resolve, reject) => {\n    res = resolve;\n    rej = reject;\n  });\n  promise.resolve = res;\n  promise.reject = rej;\n  return promise;\n}\nfunction makeString(object) {\n  if (object == null) return '';\n  return '' + object;\n}\nfunction copy(a, s, t) {\n  a.forEach(m => {\n    if (s[m]) t[m] = s[m];\n  });\n}\nconst lastOfPathSeparatorRegExp = /###/g;\nfunction getLastOfPath(object, path, Empty) {\n  function cleanKey(key) {\n    return key && key.indexOf('###') > -1 ? key.replace(lastOfPathSeparatorRegExp, '.') : key;\n  }\n  function canNotTraverseDeeper() {\n    return !object || typeof object === 'string';\n  }\n  const stack = typeof path !== 'string' ? path : path.split('.');\n  let stackIndex = 0;\n  while (stackIndex < stack.length - 1) {\n    if (canNotTraverseDeeper()) return {};\n    const key = cleanKey(stack[stackIndex]);\n    if (!object[key] && Empty) object[key] = new Empty();\n    if (Object.prototype.hasOwnProperty.call(object, key)) {\n      object = object[key];\n    } else {\n      object = {};\n    }\n    ++stackIndex;\n  }\n  if (canNotTraverseDeeper()) return {};\n  return {\n    obj: object,\n    k: cleanKey(stack[stackIndex])\n  };\n}\nfunction setPath(object, path, newValue) {\n  const {\n    obj,\n    k\n  } = getLastOfPath(object, path, Object);\n  if (obj !== undefined || path.length === 1) {\n    obj[k] = newValue;\n    return;\n  }\n  let e = path[path.length - 1];\n  let p = path.slice(0, path.length - 1);\n  let last = getLastOfPath(object, p, Object);\n  while (last.obj === undefined && p.length) {\n    e = \"\".concat(p[p.length - 1], \".\").concat(e);\n    p = p.slice(0, p.length - 1);\n    last = getLastOfPath(object, p, Object);\n    if (last && last.obj && typeof last.obj[\"\".concat(last.k, \".\").concat(e)] !== 'undefined') {\n      last.obj = undefined;\n    }\n  }\n  last.obj[\"\".concat(last.k, \".\").concat(e)] = newValue;\n}\nfunction pushPath(object, path, newValue, concat) {\n  const {\n    obj,\n    k\n  } = getLastOfPath(object, path, Object);\n  obj[k] = obj[k] || [];\n  if (concat) obj[k] = obj[k].concat(newValue);\n  if (!concat) obj[k].push(newValue);\n}\nfunction getPath(object, path) {\n  const {\n    obj,\n    k\n  } = getLastOfPath(object, path);\n  if (!obj) return undefined;\n  return obj[k];\n}\nfunction getPathWithDefaults(data, defaultData, key) {\n  const value = getPath(data, key);\n  if (value !== undefined) {\n    return value;\n  }\n  return getPath(defaultData, key);\n}\nfunction deepExtend(target, source, overwrite) {\n  for (const prop in source) {\n    if (prop !== '__proto__' && prop !== 'constructor') {\n      if (prop in target) {\n        if (typeof target[prop] === 'string' || target[prop] instanceof String || typeof source[prop] === 'string' || source[prop] instanceof String) {\n          if (overwrite) target[prop] = source[prop];\n        } else {\n          deepExtend(target[prop], source[prop], overwrite);\n        }\n      } else {\n        target[prop] = source[prop];\n      }\n    }\n  }\n  return target;\n}\nfunction regexEscape(str) {\n  return str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\n}\nvar _entityMap = {\n  '&': '&amp;',\n  '<': '&lt;',\n  '>': '&gt;',\n  '\"': '&quot;',\n  \"'\": '&#39;',\n  '/': '&#x2F;'\n};\nfunction escape(data) {\n  if (typeof data === 'string') {\n    return data.replace(/[&<>\"'\\/]/g, s => _entityMap[s]);\n  }\n  return data;\n}\nclass RegExpCache {\n  constructor(capacity) {\n    this.capacity = capacity;\n    this.regExpMap = new Map();\n    this.regExpQueue = [];\n  }\n  getRegExp(pattern) {\n    const regExpFromCache = this.regExpMap.get(pattern);\n    if (regExpFromCache !== undefined) {\n      return regExpFromCache;\n    }\n    const regExpNew = new RegExp(pattern);\n    if (this.regExpQueue.length === this.capacity) {\n      this.regExpMap.delete(this.regExpQueue.shift());\n    }\n    this.regExpMap.set(pattern, regExpNew);\n    this.regExpQueue.push(pattern);\n    return regExpNew;\n  }\n}\nconst chars = [' ', ',', '?', '!', ';'];\nconst looksLikeObjectPathRegExpCache = new RegExpCache(20);\nfunction looksLikeObjectPath(key, nsSeparator, keySeparator) {\n  nsSeparator = nsSeparator || '';\n  keySeparator = keySeparator || '';\n  const possibleChars = chars.filter(c => nsSeparator.indexOf(c) < 0 && keySeparator.indexOf(c) < 0);\n  if (possibleChars.length === 0) return true;\n  const r = looksLikeObjectPathRegExpCache.getRegExp(\"(\".concat(possibleChars.map(c => c === '?' ? '\\\\?' : c).join('|'), \")\"));\n  let matched = !r.test(key);\n  if (!matched) {\n    const ki = key.indexOf(keySeparator);\n    if (ki > 0 && !r.test(key.substring(0, ki))) {\n      matched = true;\n    }\n  }\n  return matched;\n}\nfunction deepFind(obj, path) {\n  let keySeparator = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '.';\n  if (!obj) return undefined;\n  if (obj[path]) return obj[path];\n  const tokens = path.split(keySeparator);\n  let current = obj;\n  for (let i = 0; i < tokens.length;) {\n    if (!current || typeof current !== 'object') {\n      return undefined;\n    }\n    let next;\n    let nextPath = '';\n    for (let j = i; j < tokens.length; ++j) {\n      if (j !== i) {\n        nextPath += keySeparator;\n      }\n      nextPath += tokens[j];\n      next = current[nextPath];\n      if (next !== undefined) {\n        if (['string', 'number', 'boolean'].indexOf(typeof next) > -1 && j < tokens.length - 1) {\n          continue;\n        }\n        i += j - i + 1;\n        break;\n      }\n    }\n    current = next;\n  }\n  return current;\n}\nfunction getCleanedCode(code) {\n  if (code && code.indexOf('_') > 0) return code.replace('_', '-');\n  return code;\n}\nclass ResourceStore extends EventEmitter {\n  constructor(data) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n      ns: ['translation'],\n      defaultNS: 'translation'\n    };\n    super();\n    this.data = data || {};\n    this.options = options;\n    if (this.options.keySeparator === undefined) {\n      this.options.keySeparator = '.';\n    }\n    if (this.options.ignoreJSONStructure === undefined) {\n      this.options.ignoreJSONStructure = true;\n    }\n  }\n  addNamespaces(ns) {\n    if (this.options.ns.indexOf(ns) < 0) {\n      this.options.ns.push(ns);\n    }\n  }\n  removeNamespaces(ns) {\n    const index = this.options.ns.indexOf(ns);\n    if (index > -1) {\n      this.options.ns.splice(index, 1);\n    }\n  }\n  getResource(lng, ns, key) {\n    let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n    const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n    const ignoreJSONStructure = options.ignoreJSONStructure !== undefined ? options.ignoreJSONStructure : this.options.ignoreJSONStructure;\n    let path;\n    if (lng.indexOf('.') > -1) {\n      path = lng.split('.');\n    } else {\n      path = [lng, ns];\n      if (key) {\n        if (Array.isArray(key)) {\n          path.push(...key);\n        } else if (typeof key === 'string' && keySeparator) {\n          path.push(...key.split(keySeparator));\n        } else {\n          path.push(key);\n        }\n      }\n    }\n    const result = getPath(this.data, path);\n    if (!result && !ns && !key && lng.indexOf('.') > -1) {\n      lng = path[0];\n      ns = path[1];\n      key = path.slice(2).join('.');\n    }\n    if (result || !ignoreJSONStructure || typeof key !== 'string') return result;\n    return deepFind(this.data && this.data[lng] && this.data[lng][ns], key, keySeparator);\n  }\n  addResource(lng, ns, key, value) {\n    let options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {\n      silent: false\n    };\n    const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n    let path = [lng, ns];\n    if (key) path = path.concat(keySeparator ? key.split(keySeparator) : key);\n    if (lng.indexOf('.') > -1) {\n      path = lng.split('.');\n      value = ns;\n      ns = path[1];\n    }\n    this.addNamespaces(ns);\n    setPath(this.data, path, value);\n    if (!options.silent) this.emit('added', lng, ns, key, value);\n  }\n  addResources(lng, ns, resources) {\n    let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {\n      silent: false\n    };\n    for (const m in resources) {\n      if (typeof resources[m] === 'string' || Object.prototype.toString.apply(resources[m]) === '[object Array]') this.addResource(lng, ns, m, resources[m], {\n        silent: true\n      });\n    }\n    if (!options.silent) this.emit('added', lng, ns, resources);\n  }\n  addResourceBundle(lng, ns, resources, deep, overwrite) {\n    let options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {\n      silent: false\n    };\n    let path = [lng, ns];\n    if (lng.indexOf('.') > -1) {\n      path = lng.split('.');\n      deep = resources;\n      resources = ns;\n      ns = path[1];\n    }\n    this.addNamespaces(ns);\n    let pack = getPath(this.data, path) || {};\n    if (deep) {\n      deepExtend(pack, resources, overwrite);\n    } else {\n      pack = {\n        ...pack,\n        ...resources\n      };\n    }\n    setPath(this.data, path, pack);\n    if (!options.silent) this.emit('added', lng, ns, resources);\n  }\n  removeResourceBundle(lng, ns) {\n    if (this.hasResourceBundle(lng, ns)) {\n      delete this.data[lng][ns];\n    }\n    this.removeNamespaces(ns);\n    this.emit('removed', lng, ns);\n  }\n  hasResourceBundle(lng, ns) {\n    return this.getResource(lng, ns) !== undefined;\n  }\n  getResourceBundle(lng, ns) {\n    if (!ns) ns = this.options.defaultNS;\n    if (this.options.compatibilityAPI === 'v1') return {\n      ...{},\n      ...this.getResource(lng, ns)\n    };\n    return this.getResource(lng, ns);\n  }\n  getDataByLanguage(lng) {\n    return this.data[lng];\n  }\n  hasLanguageSomeTranslations(lng) {\n    const data = this.getDataByLanguage(lng);\n    const n = data && Object.keys(data) || [];\n    return !!n.find(v => data[v] && Object.keys(data[v]).length > 0);\n  }\n  toJSON() {\n    return this.data;\n  }\n}\nvar postProcessor = {\n  processors: {},\n  addPostProcessor(module) {\n    this.processors[module.name] = module;\n  },\n  handle(processors, value, key, options, translator) {\n    processors.forEach(processor => {\n      if (this.processors[processor]) value = this.processors[processor].process(value, key, options, translator);\n    });\n    return value;\n  }\n};\nconst checkedLoadedFor = {};\nclass Translator extends EventEmitter {\n  constructor(services) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    super();\n    copy(['resourceStore', 'languageUtils', 'pluralResolver', 'interpolator', 'backendConnector', 'i18nFormat', 'utils'], services, this);\n    this.options = options;\n    if (this.options.keySeparator === undefined) {\n      this.options.keySeparator = '.';\n    }\n    this.logger = baseLogger.create('translator');\n  }\n  changeLanguage(lng) {\n    if (lng) this.language = lng;\n  }\n  exists(key) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n      interpolation: {}\n    };\n    if (key === undefined || key === null) {\n      return false;\n    }\n    const resolved = this.resolve(key, options);\n    return resolved && resolved.res !== undefined;\n  }\n  extractFromKey(key, options) {\n    let nsSeparator = options.nsSeparator !== undefined ? options.nsSeparator : this.options.nsSeparator;\n    if (nsSeparator === undefined) nsSeparator = ':';\n    const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n    let namespaces = options.ns || this.options.defaultNS || [];\n    const wouldCheckForNsInKey = nsSeparator && key.indexOf(nsSeparator) > -1;\n    const seemsNaturalLanguage = !this.options.userDefinedKeySeparator && !options.keySeparator && !this.options.userDefinedNsSeparator && !options.nsSeparator && !looksLikeObjectPath(key, nsSeparator, keySeparator);\n    if (wouldCheckForNsInKey && !seemsNaturalLanguage) {\n      const m = key.match(this.interpolator.nestingRegexp);\n      if (m && m.length > 0) {\n        return {\n          key,\n          namespaces\n        };\n      }\n      const parts = key.split(nsSeparator);\n      if (nsSeparator !== keySeparator || nsSeparator === keySeparator && this.options.ns.indexOf(parts[0]) > -1) namespaces = parts.shift();\n      key = parts.join(keySeparator);\n    }\n    if (typeof namespaces === 'string') namespaces = [namespaces];\n    return {\n      key,\n      namespaces\n    };\n  }\n  translate(keys, options, lastKey) {\n    if (typeof options !== 'object' && this.options.overloadTranslationOptionHandler) {\n      options = this.options.overloadTranslationOptionHandler(arguments);\n    }\n    if (typeof options === 'object') options = {\n      ...options\n    };\n    if (!options) options = {};\n    if (keys === undefined || keys === null) return '';\n    if (!Array.isArray(keys)) keys = [String(keys)];\n    const returnDetails = options.returnDetails !== undefined ? options.returnDetails : this.options.returnDetails;\n    const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n    const {\n      key,\n      namespaces\n    } = this.extractFromKey(keys[keys.length - 1], options);\n    const namespace = namespaces[namespaces.length - 1];\n    const lng = options.lng || this.language;\n    const appendNamespaceToCIMode = options.appendNamespaceToCIMode || this.options.appendNamespaceToCIMode;\n    if (lng && lng.toLowerCase() === 'cimode') {\n      if (appendNamespaceToCIMode) {\n        const nsSeparator = options.nsSeparator || this.options.nsSeparator;\n        if (returnDetails) {\n          return {\n            res: \"\".concat(namespace).concat(nsSeparator).concat(key),\n            usedKey: key,\n            exactUsedKey: key,\n            usedLng: lng,\n            usedNS: namespace,\n            usedParams: this.getUsedParamsDetails(options)\n          };\n        }\n        return \"\".concat(namespace).concat(nsSeparator).concat(key);\n      }\n      if (returnDetails) {\n        return {\n          res: key,\n          usedKey: key,\n          exactUsedKey: key,\n          usedLng: lng,\n          usedNS: namespace,\n          usedParams: this.getUsedParamsDetails(options)\n        };\n      }\n      return key;\n    }\n    const resolved = this.resolve(keys, options);\n    let res = resolved && resolved.res;\n    const resUsedKey = resolved && resolved.usedKey || key;\n    const resExactUsedKey = resolved && resolved.exactUsedKey || key;\n    const resType = Object.prototype.toString.apply(res);\n    const noObject = ['[object Number]', '[object Function]', '[object RegExp]'];\n    const joinArrays = options.joinArrays !== undefined ? options.joinArrays : this.options.joinArrays;\n    const handleAsObjectInI18nFormat = !this.i18nFormat || this.i18nFormat.handleAsObject;\n    const handleAsObject = typeof res !== 'string' && typeof res !== 'boolean' && typeof res !== 'number';\n    if (handleAsObjectInI18nFormat && res && handleAsObject && noObject.indexOf(resType) < 0 && !(typeof joinArrays === 'string' && resType === '[object Array]')) {\n      if (!options.returnObjects && !this.options.returnObjects) {\n        if (!this.options.returnedObjectHandler) {\n          this.logger.warn('accessing an object - but returnObjects options is not enabled!');\n        }\n        const r = this.options.returnedObjectHandler ? this.options.returnedObjectHandler(resUsedKey, res, {\n          ...options,\n          ns: namespaces\n        }) : \"key '\".concat(key, \" (\").concat(this.language, \")' returned an object instead of string.\");\n        if (returnDetails) {\n          resolved.res = r;\n          resolved.usedParams = this.getUsedParamsDetails(options);\n          return resolved;\n        }\n        return r;\n      }\n      if (keySeparator) {\n        const resTypeIsArray = resType === '[object Array]';\n        const copy = resTypeIsArray ? [] : {};\n        const newKeyToUse = resTypeIsArray ? resExactUsedKey : resUsedKey;\n        for (const m in res) {\n          if (Object.prototype.hasOwnProperty.call(res, m)) {\n            const deepKey = \"\".concat(newKeyToUse).concat(keySeparator).concat(m);\n            copy[m] = this.translate(deepKey, {\n              ...options,\n              ...{\n                joinArrays: false,\n                ns: namespaces\n              }\n            });\n            if (copy[m] === deepKey) copy[m] = res[m];\n          }\n        }\n        res = copy;\n      }\n    } else if (handleAsObjectInI18nFormat && typeof joinArrays === 'string' && resType === '[object Array]') {\n      res = res.join(joinArrays);\n      if (res) res = this.extendTranslation(res, keys, options, lastKey);\n    } else {\n      let usedDefault = false;\n      let usedKey = false;\n      const needsPluralHandling = options.count !== undefined && typeof options.count !== 'string';\n      const hasDefaultValue = Translator.hasDefaultValue(options);\n      const defaultValueSuffix = needsPluralHandling ? this.pluralResolver.getSuffix(lng, options.count, options) : '';\n      const defaultValueSuffixOrdinalFallback = options.ordinal && needsPluralHandling ? this.pluralResolver.getSuffix(lng, options.count, {\n        ordinal: false\n      }) : '';\n      const needsZeroSuffixLookup = needsPluralHandling && !options.ordinal && options.count === 0 && this.pluralResolver.shouldUseIntlApi();\n      const defaultValue = needsZeroSuffixLookup && options[\"defaultValue\".concat(this.options.pluralSeparator, \"zero\")] || options[\"defaultValue\".concat(defaultValueSuffix)] || options[\"defaultValue\".concat(defaultValueSuffixOrdinalFallback)] || options.defaultValue;\n      if (!this.isValidLookup(res) && hasDefaultValue) {\n        usedDefault = true;\n        res = defaultValue;\n      }\n      if (!this.isValidLookup(res)) {\n        usedKey = true;\n        res = key;\n      }\n      const missingKeyNoValueFallbackToKey = options.missingKeyNoValueFallbackToKey || this.options.missingKeyNoValueFallbackToKey;\n      const resForMissing = missingKeyNoValueFallbackToKey && usedKey ? undefined : res;\n      const updateMissing = hasDefaultValue && defaultValue !== res && this.options.updateMissing;\n      if (usedKey || usedDefault || updateMissing) {\n        this.logger.log(updateMissing ? 'updateKey' : 'missingKey', lng, namespace, key, updateMissing ? defaultValue : res);\n        if (keySeparator) {\n          const fk = this.resolve(key, {\n            ...options,\n            keySeparator: false\n          });\n          if (fk && fk.res) this.logger.warn('Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.');\n        }\n        let lngs = [];\n        const fallbackLngs = this.languageUtils.getFallbackCodes(this.options.fallbackLng, options.lng || this.language);\n        if (this.options.saveMissingTo === 'fallback' && fallbackLngs && fallbackLngs[0]) {\n          for (let i = 0; i < fallbackLngs.length; i++) {\n            lngs.push(fallbackLngs[i]);\n          }\n        } else if (this.options.saveMissingTo === 'all') {\n          lngs = this.languageUtils.toResolveHierarchy(options.lng || this.language);\n        } else {\n          lngs.push(options.lng || this.language);\n        }\n        const send = (l, k, specificDefaultValue) => {\n          const defaultForMissing = hasDefaultValue && specificDefaultValue !== res ? specificDefaultValue : resForMissing;\n          if (this.options.missingKeyHandler) {\n            this.options.missingKeyHandler(l, namespace, k, defaultForMissing, updateMissing, options);\n          } else if (this.backendConnector && this.backendConnector.saveMissing) {\n            this.backendConnector.saveMissing(l, namespace, k, defaultForMissing, updateMissing, options);\n          }\n          this.emit('missingKey', l, namespace, k, res);\n        };\n        if (this.options.saveMissing) {\n          if (this.options.saveMissingPlurals && needsPluralHandling) {\n            lngs.forEach(language => {\n              const suffixes = this.pluralResolver.getSuffixes(language, options);\n              if (needsZeroSuffixLookup && options[\"defaultValue\".concat(this.options.pluralSeparator, \"zero\")] && suffixes.indexOf(\"\".concat(this.options.pluralSeparator, \"zero\")) < 0) {\n                suffixes.push(\"\".concat(this.options.pluralSeparator, \"zero\"));\n              }\n              suffixes.forEach(suffix => {\n                send([language], key + suffix, options[\"defaultValue\".concat(suffix)] || defaultValue);\n              });\n            });\n          } else {\n            send(lngs, key, defaultValue);\n          }\n        }\n      }\n      res = this.extendTranslation(res, keys, options, resolved, lastKey);\n      if (usedKey && res === key && this.options.appendNamespaceToMissingKey) res = \"\".concat(namespace, \":\").concat(key);\n      if ((usedKey || usedDefault) && this.options.parseMissingKeyHandler) {\n        if (this.options.compatibilityAPI !== 'v1') {\n          res = this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey ? \"\".concat(namespace, \":\").concat(key) : key, usedDefault ? res : undefined);\n        } else {\n          res = this.options.parseMissingKeyHandler(res);\n        }\n      }\n    }\n    if (returnDetails) {\n      resolved.res = res;\n      resolved.usedParams = this.getUsedParamsDetails(options);\n      return resolved;\n    }\n    return res;\n  }\n  extendTranslation(res, key, options, resolved, lastKey) {\n    var _this = this;\n    if (this.i18nFormat && this.i18nFormat.parse) {\n      res = this.i18nFormat.parse(res, {\n        ...this.options.interpolation.defaultVariables,\n        ...options\n      }, options.lng || this.language || resolved.usedLng, resolved.usedNS, resolved.usedKey, {\n        resolved\n      });\n    } else if (!options.skipInterpolation) {\n      if (options.interpolation) this.interpolator.init({\n        ...options,\n        ...{\n          interpolation: {\n            ...this.options.interpolation,\n            ...options.interpolation\n          }\n        }\n      });\n      const skipOnVariables = typeof res === 'string' && (options && options.interpolation && options.interpolation.skipOnVariables !== undefined ? options.interpolation.skipOnVariables : this.options.interpolation.skipOnVariables);\n      let nestBef;\n      if (skipOnVariables) {\n        const nb = res.match(this.interpolator.nestingRegexp);\n        nestBef = nb && nb.length;\n      }\n      let data = options.replace && typeof options.replace !== 'string' ? options.replace : options;\n      if (this.options.interpolation.defaultVariables) data = {\n        ...this.options.interpolation.defaultVariables,\n        ...data\n      };\n      res = this.interpolator.interpolate(res, data, options.lng || this.language, options);\n      if (skipOnVariables) {\n        const na = res.match(this.interpolator.nestingRegexp);\n        const nestAft = na && na.length;\n        if (nestBef < nestAft) options.nest = false;\n      }\n      if (!options.lng && this.options.compatibilityAPI !== 'v1' && resolved && resolved.res) options.lng = resolved.usedLng;\n      if (options.nest !== false) res = this.interpolator.nest(res, function () {\n        for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n          args[_key] = arguments[_key];\n        }\n        if (lastKey && lastKey[0] === args[0] && !options.context) {\n          _this.logger.warn(\"It seems you are nesting recursively key: \".concat(args[0], \" in key: \").concat(key[0]));\n          return null;\n        }\n        return _this.translate(...args, key);\n      }, options);\n      if (options.interpolation) this.interpolator.reset();\n    }\n    const postProcess = options.postProcess || this.options.postProcess;\n    const postProcessorNames = typeof postProcess === 'string' ? [postProcess] : postProcess;\n    if (res !== undefined && res !== null && postProcessorNames && postProcessorNames.length && options.applyPostProcessor !== false) {\n      res = postProcessor.handle(postProcessorNames, res, key, this.options && this.options.postProcessPassResolved ? {\n        i18nResolved: {\n          ...resolved,\n          usedParams: this.getUsedParamsDetails(options)\n        },\n        ...options\n      } : options, this);\n    }\n    return res;\n  }\n  resolve(keys) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    let found;\n    let usedKey;\n    let exactUsedKey;\n    let usedLng;\n    let usedNS;\n    if (typeof keys === 'string') keys = [keys];\n    keys.forEach(k => {\n      if (this.isValidLookup(found)) return;\n      const extracted = this.extractFromKey(k, options);\n      const key = extracted.key;\n      usedKey = key;\n      let namespaces = extracted.namespaces;\n      if (this.options.fallbackNS) namespaces = namespaces.concat(this.options.fallbackNS);\n      const needsPluralHandling = options.count !== undefined && typeof options.count !== 'string';\n      const needsZeroSuffixLookup = needsPluralHandling && !options.ordinal && options.count === 0 && this.pluralResolver.shouldUseIntlApi();\n      const needsContextHandling = options.context !== undefined && (typeof options.context === 'string' || typeof options.context === 'number') && options.context !== '';\n      const codes = options.lngs ? options.lngs : this.languageUtils.toResolveHierarchy(options.lng || this.language, options.fallbackLng);\n      namespaces.forEach(ns => {\n        if (this.isValidLookup(found)) return;\n        usedNS = ns;\n        if (!checkedLoadedFor[\"\".concat(codes[0], \"-\").concat(ns)] && this.utils && this.utils.hasLoadedNamespace && !this.utils.hasLoadedNamespace(usedNS)) {\n          checkedLoadedFor[\"\".concat(codes[0], \"-\").concat(ns)] = true;\n          this.logger.warn(\"key \\\"\".concat(usedKey, \"\\\" for languages \\\"\").concat(codes.join(', '), \"\\\" won't get resolved as namespace \\\"\").concat(usedNS, \"\\\" was not yet loaded\"), 'This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!');\n        }\n        codes.forEach(code => {\n          if (this.isValidLookup(found)) return;\n          usedLng = code;\n          const finalKeys = [key];\n          if (this.i18nFormat && this.i18nFormat.addLookupKeys) {\n            this.i18nFormat.addLookupKeys(finalKeys, key, code, ns, options);\n          } else {\n            let pluralSuffix;\n            if (needsPluralHandling) pluralSuffix = this.pluralResolver.getSuffix(code, options.count, options);\n            const zeroSuffix = \"\".concat(this.options.pluralSeparator, \"zero\");\n            const ordinalPrefix = \"\".concat(this.options.pluralSeparator, \"ordinal\").concat(this.options.pluralSeparator);\n            if (needsPluralHandling) {\n              finalKeys.push(key + pluralSuffix);\n              if (options.ordinal && pluralSuffix.indexOf(ordinalPrefix) === 0) {\n                finalKeys.push(key + pluralSuffix.replace(ordinalPrefix, this.options.pluralSeparator));\n              }\n              if (needsZeroSuffixLookup) {\n                finalKeys.push(key + zeroSuffix);\n              }\n            }\n            if (needsContextHandling) {\n              const contextKey = \"\".concat(key).concat(this.options.contextSeparator).concat(options.context);\n              finalKeys.push(contextKey);\n              if (needsPluralHandling) {\n                finalKeys.push(contextKey + pluralSuffix);\n                if (options.ordinal && pluralSuffix.indexOf(ordinalPrefix) === 0) {\n                  finalKeys.push(contextKey + pluralSuffix.replace(ordinalPrefix, this.options.pluralSeparator));\n                }\n                if (needsZeroSuffixLookup) {\n                  finalKeys.push(contextKey + zeroSuffix);\n                }\n              }\n            }\n          }\n          let possibleKey;\n          while (possibleKey = finalKeys.pop()) {\n            if (!this.isValidLookup(found)) {\n              exactUsedKey = possibleKey;\n              found = this.getResource(code, ns, possibleKey, options);\n            }\n          }\n        });\n      });\n    });\n    return {\n      res: found,\n      usedKey,\n      exactUsedKey,\n      usedLng,\n      usedNS\n    };\n  }\n  isValidLookup(res) {\n    return res !== undefined && !(!this.options.returnNull && res === null) && !(!this.options.returnEmptyString && res === '');\n  }\n  getResource(code, ns, key) {\n    let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n    if (this.i18nFormat && this.i18nFormat.getResource) return this.i18nFormat.getResource(code, ns, key, options);\n    return this.resourceStore.getResource(code, ns, key, options);\n  }\n  getUsedParamsDetails() {\n    let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    const optionsKeys = ['defaultValue', 'ordinal', 'context', 'replace', 'lng', 'lngs', 'fallbackLng', 'ns', 'keySeparator', 'nsSeparator', 'returnObjects', 'returnDetails', 'joinArrays', 'postProcess', 'interpolation'];\n    const useOptionsReplaceForData = options.replace && typeof options.replace !== 'string';\n    let data = useOptionsReplaceForData ? options.replace : options;\n    if (useOptionsReplaceForData && typeof options.count !== 'undefined') {\n      data.count = options.count;\n    }\n    if (this.options.interpolation.defaultVariables) {\n      data = {\n        ...this.options.interpolation.defaultVariables,\n        ...data\n      };\n    }\n    if (!useOptionsReplaceForData) {\n      data = {\n        ...data\n      };\n      for (const key of optionsKeys) {\n        delete data[key];\n      }\n    }\n    return data;\n  }\n  static hasDefaultValue(options) {\n    const prefix = 'defaultValue';\n    for (const option in options) {\n      if (Object.prototype.hasOwnProperty.call(options, option) && prefix === option.substring(0, prefix.length) && undefined !== options[option]) {\n        return true;\n      }\n    }\n    return false;\n  }\n}\nfunction capitalize(string) {\n  return string.charAt(0).toUpperCase() + string.slice(1);\n}\nclass LanguageUtil {\n  constructor(options) {\n    this.options = options;\n    this.supportedLngs = this.options.supportedLngs || false;\n    this.logger = baseLogger.create('languageUtils');\n  }\n  getScriptPartFromCode(code) {\n    code = getCleanedCode(code);\n    if (!code || code.indexOf('-') < 0) return null;\n    const p = code.split('-');\n    if (p.length === 2) return null;\n    p.pop();\n    if (p[p.length - 1].toLowerCase() === 'x') return null;\n    return this.formatLanguageCode(p.join('-'));\n  }\n  getLanguagePartFromCode(code) {\n    code = getCleanedCode(code);\n    if (!code || code.indexOf('-') < 0) return code;\n    const p = code.split('-');\n    return this.formatLanguageCode(p[0]);\n  }\n  formatLanguageCode(code) {\n    if (typeof code === 'string' && code.indexOf('-') > -1) {\n      const specialCases = ['hans', 'hant', 'latn', 'cyrl', 'cans', 'mong', 'arab'];\n      let p = code.split('-');\n      if (this.options.lowerCaseLng) {\n        p = p.map(part => part.toLowerCase());\n      } else if (p.length === 2) {\n        p[0] = p[0].toLowerCase();\n        p[1] = p[1].toUpperCase();\n        if (specialCases.indexOf(p[1].toLowerCase()) > -1) p[1] = capitalize(p[1].toLowerCase());\n      } else if (p.length === 3) {\n        p[0] = p[0].toLowerCase();\n        if (p[1].length === 2) p[1] = p[1].toUpperCase();\n        if (p[0] !== 'sgn' && p[2].length === 2) p[2] = p[2].toUpperCase();\n        if (specialCases.indexOf(p[1].toLowerCase()) > -1) p[1] = capitalize(p[1].toLowerCase());\n        if (specialCases.indexOf(p[2].toLowerCase()) > -1) p[2] = capitalize(p[2].toLowerCase());\n      }\n      return p.join('-');\n    }\n    return this.options.cleanCode || this.options.lowerCaseLng ? code.toLowerCase() : code;\n  }\n  isSupportedCode(code) {\n    if (this.options.load === 'languageOnly' || this.options.nonExplicitSupportedLngs) {\n      code = this.getLanguagePartFromCode(code);\n    }\n    return !this.supportedLngs || !this.supportedLngs.length || this.supportedLngs.indexOf(code) > -1;\n  }\n  getBestMatchFromCodes(codes) {\n    if (!codes) return null;\n    let found;\n    codes.forEach(code => {\n      if (found) return;\n      const cleanedLng = this.formatLanguageCode(code);\n      if (!this.options.supportedLngs || this.isSupportedCode(cleanedLng)) found = cleanedLng;\n    });\n    if (!found && this.options.supportedLngs) {\n      codes.forEach(code => {\n        if (found) return;\n        const lngOnly = this.getLanguagePartFromCode(code);\n        if (this.isSupportedCode(lngOnly)) return found = lngOnly;\n        found = this.options.supportedLngs.find(supportedLng => {\n          if (supportedLng === lngOnly) return supportedLng;\n          if (supportedLng.indexOf('-') < 0 && lngOnly.indexOf('-') < 0) return;\n          if (supportedLng.indexOf(lngOnly) === 0) return supportedLng;\n        });\n      });\n    }\n    if (!found) found = this.getFallbackCodes(this.options.fallbackLng)[0];\n    return found;\n  }\n  getFallbackCodes(fallbacks, code) {\n    if (!fallbacks) return [];\n    if (typeof fallbacks === 'function') fallbacks = fallbacks(code);\n    if (typeof fallbacks === 'string') fallbacks = [fallbacks];\n    if (Object.prototype.toString.apply(fallbacks) === '[object Array]') return fallbacks;\n    if (!code) return fallbacks.default || [];\n    let found = fallbacks[code];\n    if (!found) found = fallbacks[this.getScriptPartFromCode(code)];\n    if (!found) found = fallbacks[this.formatLanguageCode(code)];\n    if (!found) found = fallbacks[this.getLanguagePartFromCode(code)];\n    if (!found) found = fallbacks.default;\n    return found || [];\n  }\n  toResolveHierarchy(code, fallbackCode) {\n    const fallbackCodes = this.getFallbackCodes(fallbackCode || this.options.fallbackLng || [], code);\n    const codes = [];\n    const addCode = c => {\n      if (!c) return;\n      if (this.isSupportedCode(c)) {\n        codes.push(c);\n      } else {\n        this.logger.warn(\"rejecting language code not found in supportedLngs: \".concat(c));\n      }\n    };\n    if (typeof code === 'string' && (code.indexOf('-') > -1 || code.indexOf('_') > -1)) {\n      if (this.options.load !== 'languageOnly') addCode(this.formatLanguageCode(code));\n      if (this.options.load !== 'languageOnly' && this.options.load !== 'currentOnly') addCode(this.getScriptPartFromCode(code));\n      if (this.options.load !== 'currentOnly') addCode(this.getLanguagePartFromCode(code));\n    } else if (typeof code === 'string') {\n      addCode(this.formatLanguageCode(code));\n    }\n    fallbackCodes.forEach(fc => {\n      if (codes.indexOf(fc) < 0) addCode(this.formatLanguageCode(fc));\n    });\n    return codes;\n  }\n}\nlet sets = [{\n  lngs: ['ach', 'ak', 'am', 'arn', 'br', 'fil', 'gun', 'ln', 'mfe', 'mg', 'mi', 'oc', 'pt', 'pt-BR', 'tg', 'tl', 'ti', 'tr', 'uz', 'wa'],\n  nr: [1, 2],\n  fc: 1\n}, {\n  lngs: ['af', 'an', 'ast', 'az', 'bg', 'bn', 'ca', 'da', 'de', 'dev', 'el', 'en', 'eo', 'es', 'et', 'eu', 'fi', 'fo', 'fur', 'fy', 'gl', 'gu', 'ha', 'hi', 'hu', 'hy', 'ia', 'it', 'kk', 'kn', 'ku', 'lb', 'mai', 'ml', 'mn', 'mr', 'nah', 'nap', 'nb', 'ne', 'nl', 'nn', 'no', 'nso', 'pa', 'pap', 'pms', 'ps', 'pt-PT', 'rm', 'sco', 'se', 'si', 'so', 'son', 'sq', 'sv', 'sw', 'ta', 'te', 'tk', 'ur', 'yo'],\n  nr: [1, 2],\n  fc: 2\n}, {\n  lngs: ['ay', 'bo', 'cgg', 'fa', 'ht', 'id', 'ja', 'jbo', 'ka', 'km', 'ko', 'ky', 'lo', 'ms', 'sah', 'su', 'th', 'tt', 'ug', 'vi', 'wo', 'zh'],\n  nr: [1],\n  fc: 3\n}, {\n  lngs: ['be', 'bs', 'cnr', 'dz', 'hr', 'ru', 'sr', 'uk'],\n  nr: [1, 2, 5],\n  fc: 4\n}, {\n  lngs: ['ar'],\n  nr: [0, 1, 2, 3, 11, 100],\n  fc: 5\n}, {\n  lngs: ['cs', 'sk'],\n  nr: [1, 2, 5],\n  fc: 6\n}, {\n  lngs: ['csb', 'pl'],\n  nr: [1, 2, 5],\n  fc: 7\n}, {\n  lngs: ['cy'],\n  nr: [1, 2, 3, 8],\n  fc: 8\n}, {\n  lngs: ['fr'],\n  nr: [1, 2],\n  fc: 9\n}, {\n  lngs: ['ga'],\n  nr: [1, 2, 3, 7, 11],\n  fc: 10\n}, {\n  lngs: ['gd'],\n  nr: [1, 2, 3, 20],\n  fc: 11\n}, {\n  lngs: ['is'],\n  nr: [1, 2],\n  fc: 12\n}, {\n  lngs: ['jv'],\n  nr: [0, 1],\n  fc: 13\n}, {\n  lngs: ['kw'],\n  nr: [1, 2, 3, 4],\n  fc: 14\n}, {\n  lngs: ['lt'],\n  nr: [1, 2, 10],\n  fc: 15\n}, {\n  lngs: ['lv'],\n  nr: [1, 2, 0],\n  fc: 16\n}, {\n  lngs: ['mk'],\n  nr: [1, 2],\n  fc: 17\n}, {\n  lngs: ['mnk'],\n  nr: [0, 1, 2],\n  fc: 18\n}, {\n  lngs: ['mt'],\n  nr: [1, 2, 11, 20],\n  fc: 19\n}, {\n  lngs: ['or'],\n  nr: [2, 1],\n  fc: 2\n}, {\n  lngs: ['ro'],\n  nr: [1, 2, 20],\n  fc: 20\n}, {\n  lngs: ['sl'],\n  nr: [5, 1, 2, 3],\n  fc: 21\n}, {\n  lngs: ['he', 'iw'],\n  nr: [1, 2, 20, 21],\n  fc: 22\n}];\nlet _rulesPluralsTypes = {\n  1: function (n) {\n    return Number(n > 1);\n  },\n  2: function (n) {\n    return Number(n != 1);\n  },\n  3: function (n) {\n    return 0;\n  },\n  4: function (n) {\n    return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n  },\n  5: function (n) {\n    return Number(n == 0 ? 0 : n == 1 ? 1 : n == 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5);\n  },\n  6: function (n) {\n    return Number(n == 1 ? 0 : n >= 2 && n <= 4 ? 1 : 2);\n  },\n  7: function (n) {\n    return Number(n == 1 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n  },\n  8: function (n) {\n    return Number(n == 1 ? 0 : n == 2 ? 1 : n != 8 && n != 11 ? 2 : 3);\n  },\n  9: function (n) {\n    return Number(n >= 2);\n  },\n  10: function (n) {\n    return Number(n == 1 ? 0 : n == 2 ? 1 : n < 7 ? 2 : n < 11 ? 3 : 4);\n  },\n  11: function (n) {\n    return Number(n == 1 || n == 11 ? 0 : n == 2 || n == 12 ? 1 : n > 2 && n < 20 ? 2 : 3);\n  },\n  12: function (n) {\n    return Number(n % 10 != 1 || n % 100 == 11);\n  },\n  13: function (n) {\n    return Number(n !== 0);\n  },\n  14: function (n) {\n    return Number(n == 1 ? 0 : n == 2 ? 1 : n == 3 ? 2 : 3);\n  },\n  15: function (n) {\n    return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n  },\n  16: function (n) {\n    return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n !== 0 ? 1 : 2);\n  },\n  17: function (n) {\n    return Number(n == 1 || n % 10 == 1 && n % 100 != 11 ? 0 : 1);\n  },\n  18: function (n) {\n    return Number(n == 0 ? 0 : n == 1 ? 1 : 2);\n  },\n  19: function (n) {\n    return Number(n == 1 ? 0 : n == 0 || n % 100 > 1 && n % 100 < 11 ? 1 : n % 100 > 10 && n % 100 < 20 ? 2 : 3);\n  },\n  20: function (n) {\n    return Number(n == 1 ? 0 : n == 0 || n % 100 > 0 && n % 100 < 20 ? 1 : 2);\n  },\n  21: function (n) {\n    return Number(n % 100 == 1 ? 1 : n % 100 == 2 ? 2 : n % 100 == 3 || n % 100 == 4 ? 3 : 0);\n  },\n  22: function (n) {\n    return Number(n == 1 ? 0 : n == 2 ? 1 : (n < 0 || n > 10) && n % 10 == 0 ? 2 : 3);\n  }\n};\nconst nonIntlVersions = ['v1', 'v2', 'v3'];\nconst intlVersions = ['v4'];\nconst suffixesOrder = {\n  zero: 0,\n  one: 1,\n  two: 2,\n  few: 3,\n  many: 4,\n  other: 5\n};\nfunction createRules() {\n  const rules = {};\n  sets.forEach(set => {\n    set.lngs.forEach(l => {\n      rules[l] = {\n        numbers: set.nr,\n        plurals: _rulesPluralsTypes[set.fc]\n      };\n    });\n  });\n  return rules;\n}\nclass PluralResolver {\n  constructor(languageUtils) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    this.languageUtils = languageUtils;\n    this.options = options;\n    this.logger = baseLogger.create('pluralResolver');\n    if ((!this.options.compatibilityJSON || intlVersions.includes(this.options.compatibilityJSON)) && (typeof Intl === 'undefined' || !Intl.PluralRules)) {\n      this.options.compatibilityJSON = 'v3';\n      this.logger.error('Your environment seems not to be Intl API compatible, use an Intl.PluralRules polyfill. Will fallback to the compatibilityJSON v3 format handling.');\n    }\n    this.rules = createRules();\n  }\n  addRule(lng, obj) {\n    this.rules[lng] = obj;\n  }\n  getRule(code) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    if (this.shouldUseIntlApi()) {\n      try {\n        return new Intl.PluralRules(getCleanedCode(code === 'dev' ? 'en' : code), {\n          type: options.ordinal ? 'ordinal' : 'cardinal'\n        });\n      } catch (err) {\n        return;\n      }\n    }\n    return this.rules[code] || this.rules[this.languageUtils.getLanguagePartFromCode(code)];\n  }\n  needsPlural(code) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    const rule = this.getRule(code, options);\n    if (this.shouldUseIntlApi()) {\n      return rule && rule.resolvedOptions().pluralCategories.length > 1;\n    }\n    return rule && rule.numbers.length > 1;\n  }\n  getPluralFormsOfKey(code, key) {\n    let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    return this.getSuffixes(code, options).map(suffix => \"\".concat(key).concat(suffix));\n  }\n  getSuffixes(code) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    const rule = this.getRule(code, options);\n    if (!rule) {\n      return [];\n    }\n    if (this.shouldUseIntlApi()) {\n      return rule.resolvedOptions().pluralCategories.sort((pluralCategory1, pluralCategory2) => suffixesOrder[pluralCategory1] - suffixesOrder[pluralCategory2]).map(pluralCategory => \"\".concat(this.options.prepend).concat(options.ordinal ? \"ordinal\".concat(this.options.prepend) : '').concat(pluralCategory));\n    }\n    return rule.numbers.map(number => this.getSuffix(code, number, options));\n  }\n  getSuffix(code, count) {\n    let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    const rule = this.getRule(code, options);\n    if (rule) {\n      if (this.shouldUseIntlApi()) {\n        return \"\".concat(this.options.prepend).concat(options.ordinal ? \"ordinal\".concat(this.options.prepend) : '').concat(rule.select(count));\n      }\n      return this.getSuffixRetroCompatible(rule, count);\n    }\n    this.logger.warn(\"no plural rule found for: \".concat(code));\n    return '';\n  }\n  getSuffixRetroCompatible(rule, count) {\n    const idx = rule.noAbs ? rule.plurals(count) : rule.plurals(Math.abs(count));\n    let suffix = rule.numbers[idx];\n    if (this.options.simplifyPluralSuffix && rule.numbers.length === 2 && rule.numbers[0] === 1) {\n      if (suffix === 2) {\n        suffix = 'plural';\n      } else if (suffix === 1) {\n        suffix = '';\n      }\n    }\n    const returnSuffix = () => this.options.prepend && suffix.toString() ? this.options.prepend + suffix.toString() : suffix.toString();\n    if (this.options.compatibilityJSON === 'v1') {\n      if (suffix === 1) return '';\n      if (typeof suffix === 'number') return \"_plural_\".concat(suffix.toString());\n      return returnSuffix();\n    } else if (this.options.compatibilityJSON === 'v2') {\n      return returnSuffix();\n    } else if (this.options.simplifyPluralSuffix && rule.numbers.length === 2 && rule.numbers[0] === 1) {\n      return returnSuffix();\n    }\n    return this.options.prepend && idx.toString() ? this.options.prepend + idx.toString() : idx.toString();\n  }\n  shouldUseIntlApi() {\n    return !nonIntlVersions.includes(this.options.compatibilityJSON);\n  }\n}\nfunction deepFindWithDefaults(data, defaultData, key) {\n  let keySeparator = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '.';\n  let ignoreJSONStructure = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n  let path = getPathWithDefaults(data, defaultData, key);\n  if (!path && ignoreJSONStructure && typeof key === 'string') {\n    path = deepFind(data, key, keySeparator);\n    if (path === undefined) path = deepFind(defaultData, key, keySeparator);\n  }\n  return path;\n}\nclass Interpolator {\n  constructor() {\n    let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    this.logger = baseLogger.create('interpolator');\n    this.options = options;\n    this.format = options.interpolation && options.interpolation.format || (value => value);\n    this.init(options);\n  }\n  init() {\n    let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    if (!options.interpolation) options.interpolation = {\n      escapeValue: true\n    };\n    const iOpts = options.interpolation;\n    this.escape = iOpts.escape !== undefined ? iOpts.escape : escape;\n    this.escapeValue = iOpts.escapeValue !== undefined ? iOpts.escapeValue : true;\n    this.useRawValueToEscape = iOpts.useRawValueToEscape !== undefined ? iOpts.useRawValueToEscape : false;\n    this.prefix = iOpts.prefix ? regexEscape(iOpts.prefix) : iOpts.prefixEscaped || '{{';\n    this.suffix = iOpts.suffix ? regexEscape(iOpts.suffix) : iOpts.suffixEscaped || '}}';\n    this.formatSeparator = iOpts.formatSeparator ? iOpts.formatSeparator : iOpts.formatSeparator || ',';\n    this.unescapePrefix = iOpts.unescapeSuffix ? '' : iOpts.unescapePrefix || '-';\n    this.unescapeSuffix = this.unescapePrefix ? '' : iOpts.unescapeSuffix || '';\n    this.nestingPrefix = iOpts.nestingPrefix ? regexEscape(iOpts.nestingPrefix) : iOpts.nestingPrefixEscaped || regexEscape('$t(');\n    this.nestingSuffix = iOpts.nestingSuffix ? regexEscape(iOpts.nestingSuffix) : iOpts.nestingSuffixEscaped || regexEscape(')');\n    this.nestingOptionsSeparator = iOpts.nestingOptionsSeparator ? iOpts.nestingOptionsSeparator : iOpts.nestingOptionsSeparator || ',';\n    this.maxReplaces = iOpts.maxReplaces ? iOpts.maxReplaces : 1000;\n    this.alwaysFormat = iOpts.alwaysFormat !== undefined ? iOpts.alwaysFormat : false;\n    this.resetRegExp();\n  }\n  reset() {\n    if (this.options) this.init(this.options);\n  }\n  resetRegExp() {\n    const getOrResetRegExp = (existingRegExp, pattern) => {\n      if (existingRegExp && existingRegExp.source === pattern) {\n        existingRegExp.lastIndex = 0;\n        return existingRegExp;\n      }\n      return new RegExp(pattern, 'g');\n    };\n    this.regexp = getOrResetRegExp(this.regexp, \"\".concat(this.prefix, \"(.+?)\").concat(this.suffix));\n    this.regexpUnescape = getOrResetRegExp(this.regexpUnescape, \"\".concat(this.prefix).concat(this.unescapePrefix, \"(.+?)\").concat(this.unescapeSuffix).concat(this.suffix));\n    this.nestingRegexp = getOrResetRegExp(this.nestingRegexp, \"\".concat(this.nestingPrefix, \"(.+?)\").concat(this.nestingSuffix));\n  }\n  interpolate(str, data, lng, options) {\n    let match;\n    let value;\n    let replaces;\n    const defaultData = this.options && this.options.interpolation && this.options.interpolation.defaultVariables || {};\n    function regexSafe(val) {\n      return val.replace(/\\$/g, '$$$$');\n    }\n    const handleFormat = key => {\n      if (key.indexOf(this.formatSeparator) < 0) {\n        const path = deepFindWithDefaults(data, defaultData, key, this.options.keySeparator, this.options.ignoreJSONStructure);\n        return this.alwaysFormat ? this.format(path, undefined, lng, {\n          ...options,\n          ...data,\n          interpolationkey: key\n        }) : path;\n      }\n      const p = key.split(this.formatSeparator);\n      const k = p.shift().trim();\n      const f = p.join(this.formatSeparator).trim();\n      return this.format(deepFindWithDefaults(data, defaultData, k, this.options.keySeparator, this.options.ignoreJSONStructure), f, lng, {\n        ...options,\n        ...data,\n        interpolationkey: k\n      });\n    };\n    this.resetRegExp();\n    const missingInterpolationHandler = options && options.missingInterpolationHandler || this.options.missingInterpolationHandler;\n    const skipOnVariables = options && options.interpolation && options.interpolation.skipOnVariables !== undefined ? options.interpolation.skipOnVariables : this.options.interpolation.skipOnVariables;\n    const todos = [{\n      regex: this.regexpUnescape,\n      safeValue: val => regexSafe(val)\n    }, {\n      regex: this.regexp,\n      safeValue: val => this.escapeValue ? regexSafe(this.escape(val)) : regexSafe(val)\n    }];\n    todos.forEach(todo => {\n      replaces = 0;\n      while (match = todo.regex.exec(str)) {\n        const matchedVar = match[1].trim();\n        value = handleFormat(matchedVar);\n        if (value === undefined) {\n          if (typeof missingInterpolationHandler === 'function') {\n            const temp = missingInterpolationHandler(str, match, options);\n            value = typeof temp === 'string' ? temp : '';\n          } else if (options && Object.prototype.hasOwnProperty.call(options, matchedVar)) {\n            value = '';\n          } else if (skipOnVariables) {\n            value = match[0];\n            continue;\n          } else {\n            this.logger.warn(\"missed to pass in variable \".concat(matchedVar, \" for interpolating \").concat(str));\n            value = '';\n          }\n        } else if (typeof value !== 'string' && !this.useRawValueToEscape) {\n          value = makeString(value);\n        }\n        const safeValue = todo.safeValue(value);\n        str = str.replace(match[0], safeValue);\n        if (skipOnVariables) {\n          todo.regex.lastIndex += value.length;\n          todo.regex.lastIndex -= match[0].length;\n        } else {\n          todo.regex.lastIndex = 0;\n        }\n        replaces++;\n        if (replaces >= this.maxReplaces) {\n          break;\n        }\n      }\n    });\n    return str;\n  }\n  nest(str, fc) {\n    let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    let match;\n    let value;\n    let clonedOptions;\n    function handleHasOptions(key, inheritedOptions) {\n      const sep = this.nestingOptionsSeparator;\n      if (key.indexOf(sep) < 0) return key;\n      const c = key.split(new RegExp(\"\".concat(sep, \"[ ]*{\")));\n      let optionsString = \"{\".concat(c[1]);\n      key = c[0];\n      optionsString = this.interpolate(optionsString, clonedOptions);\n      const matchedSingleQuotes = optionsString.match(/'/g);\n      const matchedDoubleQuotes = optionsString.match(/\"/g);\n      if (matchedSingleQuotes && matchedSingleQuotes.length % 2 === 0 && !matchedDoubleQuotes || matchedDoubleQuotes.length % 2 !== 0) {\n        optionsString = optionsString.replace(/'/g, '\"');\n      }\n      try {\n        clonedOptions = JSON.parse(optionsString);\n        if (inheritedOptions) clonedOptions = {\n          ...inheritedOptions,\n          ...clonedOptions\n        };\n      } catch (e) {\n        this.logger.warn(\"failed parsing options string in nesting for key \".concat(key), e);\n        return \"\".concat(key).concat(sep).concat(optionsString);\n      }\n      delete clonedOptions.defaultValue;\n      return key;\n    }\n    while (match = this.nestingRegexp.exec(str)) {\n      let formatters = [];\n      clonedOptions = {\n        ...options\n      };\n      clonedOptions = clonedOptions.replace && typeof clonedOptions.replace !== 'string' ? clonedOptions.replace : clonedOptions;\n      clonedOptions.applyPostProcessor = false;\n      delete clonedOptions.defaultValue;\n      let doReduce = false;\n      if (match[0].indexOf(this.formatSeparator) !== -1 && !/{.*}/.test(match[1])) {\n        const r = match[1].split(this.formatSeparator).map(elem => elem.trim());\n        match[1] = r.shift();\n        formatters = r;\n        doReduce = true;\n      }\n      value = fc(handleHasOptions.call(this, match[1].trim(), clonedOptions), clonedOptions);\n      if (value && match[0] === str && typeof value !== 'string') return value;\n      if (typeof value !== 'string') value = makeString(value);\n      if (!value) {\n        this.logger.warn(\"missed to resolve \".concat(match[1], \" for nesting \").concat(str));\n        value = '';\n      }\n      if (doReduce) {\n        value = formatters.reduce((v, f) => this.format(v, f, options.lng, {\n          ...options,\n          interpolationkey: match[1].trim()\n        }), value.trim());\n      }\n      str = str.replace(match[0], value);\n      this.regexp.lastIndex = 0;\n    }\n    return str;\n  }\n}\nfunction parseFormatStr(formatStr) {\n  let formatName = formatStr.toLowerCase().trim();\n  const formatOptions = {};\n  if (formatStr.indexOf('(') > -1) {\n    const p = formatStr.split('(');\n    formatName = p[0].toLowerCase().trim();\n    const optStr = p[1].substring(0, p[1].length - 1);\n    if (formatName === 'currency' && optStr.indexOf(':') < 0) {\n      if (!formatOptions.currency) formatOptions.currency = optStr.trim();\n    } else if (formatName === 'relativetime' && optStr.indexOf(':') < 0) {\n      if (!formatOptions.range) formatOptions.range = optStr.trim();\n    } else {\n      const opts = optStr.split(';');\n      opts.forEach(opt => {\n        if (!opt) return;\n        const [key, ...rest] = opt.split(':');\n        const val = rest.join(':').trim().replace(/^'+|'+$/g, '');\n        if (!formatOptions[key.trim()]) formatOptions[key.trim()] = val;\n        if (val === 'false') formatOptions[key.trim()] = false;\n        if (val === 'true') formatOptions[key.trim()] = true;\n        if (!isNaN(val)) formatOptions[key.trim()] = parseInt(val, 10);\n      });\n    }\n  }\n  return {\n    formatName,\n    formatOptions\n  };\n}\nfunction createCachedFormatter(fn) {\n  const cache = {};\n  return function invokeFormatter(val, lng, options) {\n    const key = lng + JSON.stringify(options);\n    let formatter = cache[key];\n    if (!formatter) {\n      formatter = fn(getCleanedCode(lng), options);\n      cache[key] = formatter;\n    }\n    return formatter(val);\n  };\n}\nclass Formatter {\n  constructor() {\n    let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    this.logger = baseLogger.create('formatter');\n    this.options = options;\n    this.formats = {\n      number: createCachedFormatter((lng, opt) => {\n        const formatter = new Intl.NumberFormat(lng, {\n          ...opt\n        });\n        return val => formatter.format(val);\n      }),\n      currency: createCachedFormatter((lng, opt) => {\n        const formatter = new Intl.NumberFormat(lng, {\n          ...opt,\n          style: 'currency'\n        });\n        return val => formatter.format(val);\n      }),\n      datetime: createCachedFormatter((lng, opt) => {\n        const formatter = new Intl.DateTimeFormat(lng, {\n          ...opt\n        });\n        return val => formatter.format(val);\n      }),\n      relativetime: createCachedFormatter((lng, opt) => {\n        const formatter = new Intl.RelativeTimeFormat(lng, {\n          ...opt\n        });\n        return val => formatter.format(val, opt.range || 'day');\n      }),\n      list: createCachedFormatter((lng, opt) => {\n        const formatter = new Intl.ListFormat(lng, {\n          ...opt\n        });\n        return val => formatter.format(val);\n      })\n    };\n    this.init(options);\n  }\n  init(services) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n      interpolation: {}\n    };\n    const iOpts = options.interpolation;\n    this.formatSeparator = iOpts.formatSeparator ? iOpts.formatSeparator : iOpts.formatSeparator || ',';\n  }\n  add(name, fc) {\n    this.formats[name.toLowerCase().trim()] = fc;\n  }\n  addCached(name, fc) {\n    this.formats[name.toLowerCase().trim()] = createCachedFormatter(fc);\n  }\n  format(value, format, lng) {\n    let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n    const formats = format.split(this.formatSeparator);\n    const result = formats.reduce((mem, f) => {\n      const {\n        formatName,\n        formatOptions\n      } = parseFormatStr(f);\n      if (this.formats[formatName]) {\n        let formatted = mem;\n        try {\n          const valOptions = options && options.formatParams && options.formatParams[options.interpolationkey] || {};\n          const l = valOptions.locale || valOptions.lng || options.locale || options.lng || lng;\n          formatted = this.formats[formatName](mem, l, {\n            ...formatOptions,\n            ...options,\n            ...valOptions\n          });\n        } catch (error) {\n          this.logger.warn(error);\n        }\n        return formatted;\n      } else {\n        this.logger.warn(\"there was no format function for \".concat(formatName));\n      }\n      return mem;\n    }, value);\n    return result;\n  }\n}\nfunction removePending(q, name) {\n  if (q.pending[name] !== undefined) {\n    delete q.pending[name];\n    q.pendingCount--;\n  }\n}\nclass Connector extends EventEmitter {\n  constructor(backend, store, services) {\n    let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n    super();\n    this.backend = backend;\n    this.store = store;\n    this.services = services;\n    this.languageUtils = services.languageUtils;\n    this.options = options;\n    this.logger = baseLogger.create('backendConnector');\n    this.waitingReads = [];\n    this.maxParallelReads = options.maxParallelReads || 10;\n    this.readingCalls = 0;\n    this.maxRetries = options.maxRetries >= 0 ? options.maxRetries : 5;\n    this.retryTimeout = options.retryTimeout >= 1 ? options.retryTimeout : 350;\n    this.state = {};\n    this.queue = [];\n    if (this.backend && this.backend.init) {\n      this.backend.init(services, options.backend, options);\n    }\n  }\n  queueLoad(languages, namespaces, options, callback) {\n    const toLoad = {};\n    const pending = {};\n    const toLoadLanguages = {};\n    const toLoadNamespaces = {};\n    languages.forEach(lng => {\n      let hasAllNamespaces = true;\n      namespaces.forEach(ns => {\n        const name = \"\".concat(lng, \"|\").concat(ns);\n        if (!options.reload && this.store.hasResourceBundle(lng, ns)) {\n          this.state[name] = 2;\n        } else if (this.state[name] < 0) ;else if (this.state[name] === 1) {\n          if (pending[name] === undefined) pending[name] = true;\n        } else {\n          this.state[name] = 1;\n          hasAllNamespaces = false;\n          if (pending[name] === undefined) pending[name] = true;\n          if (toLoad[name] === undefined) toLoad[name] = true;\n          if (toLoadNamespaces[ns] === undefined) toLoadNamespaces[ns] = true;\n        }\n      });\n      if (!hasAllNamespaces) toLoadLanguages[lng] = true;\n    });\n    if (Object.keys(toLoad).length || Object.keys(pending).length) {\n      this.queue.push({\n        pending,\n        pendingCount: Object.keys(pending).length,\n        loaded: {},\n        errors: [],\n        callback\n      });\n    }\n    return {\n      toLoad: Object.keys(toLoad),\n      pending: Object.keys(pending),\n      toLoadLanguages: Object.keys(toLoadLanguages),\n      toLoadNamespaces: Object.keys(toLoadNamespaces)\n    };\n  }\n  loaded(name, err, data) {\n    const s = name.split('|');\n    const lng = s[0];\n    const ns = s[1];\n    if (err) this.emit('failedLoading', lng, ns, err);\n    if (data) {\n      this.store.addResourceBundle(lng, ns, data);\n    }\n    this.state[name] = err ? -1 : 2;\n    const loaded = {};\n    this.queue.forEach(q => {\n      pushPath(q.loaded, [lng], ns);\n      removePending(q, name);\n      if (err) q.errors.push(err);\n      if (q.pendingCount === 0 && !q.done) {\n        Object.keys(q.loaded).forEach(l => {\n          if (!loaded[l]) loaded[l] = {};\n          const loadedKeys = q.loaded[l];\n          if (loadedKeys.length) {\n            loadedKeys.forEach(n => {\n              if (loaded[l][n] === undefined) loaded[l][n] = true;\n            });\n          }\n        });\n        q.done = true;\n        if (q.errors.length) {\n          q.callback(q.errors);\n        } else {\n          q.callback();\n        }\n      }\n    });\n    this.emit('loaded', loaded);\n    this.queue = this.queue.filter(q => !q.done);\n  }\n  read(lng, ns, fcName) {\n    let tried = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n    let wait = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : this.retryTimeout;\n    let callback = arguments.length > 5 ? arguments[5] : undefined;\n    if (!lng.length) return callback(null, {});\n    if (this.readingCalls >= this.maxParallelReads) {\n      this.waitingReads.push({\n        lng,\n        ns,\n        fcName,\n        tried,\n        wait,\n        callback\n      });\n      return;\n    }\n    this.readingCalls++;\n    const resolver = (err, data) => {\n      this.readingCalls--;\n      if (this.waitingReads.length > 0) {\n        const next = this.waitingReads.shift();\n        this.read(next.lng, next.ns, next.fcName, next.tried, next.wait, next.callback);\n      }\n      if (err && data && tried < this.maxRetries) {\n        setTimeout(() => {\n          this.read.call(this, lng, ns, fcName, tried + 1, wait * 2, callback);\n        }, wait);\n        return;\n      }\n      callback(err, data);\n    };\n    const fc = this.backend[fcName].bind(this.backend);\n    if (fc.length === 2) {\n      try {\n        const r = fc(lng, ns);\n        if (r && typeof r.then === 'function') {\n          r.then(data => resolver(null, data)).catch(resolver);\n        } else {\n          resolver(null, r);\n        }\n      } catch (err) {\n        resolver(err);\n      }\n      return;\n    }\n    return fc(lng, ns, resolver);\n  }\n  prepareLoading(languages, namespaces) {\n    let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    let callback = arguments.length > 3 ? arguments[3] : undefined;\n    if (!this.backend) {\n      this.logger.warn('No backend was added via i18next.use. Will not load resources.');\n      return callback && callback();\n    }\n    if (typeof languages === 'string') languages = this.languageUtils.toResolveHierarchy(languages);\n    if (typeof namespaces === 'string') namespaces = [namespaces];\n    const toLoad = this.queueLoad(languages, namespaces, options, callback);\n    if (!toLoad.toLoad.length) {\n      if (!toLoad.pending.length) callback();\n      return null;\n    }\n    toLoad.toLoad.forEach(name => {\n      this.loadOne(name);\n    });\n  }\n  load(languages, namespaces, callback) {\n    this.prepareLoading(languages, namespaces, {}, callback);\n  }\n  reload(languages, namespaces, callback) {\n    this.prepareLoading(languages, namespaces, {\n      reload: true\n    }, callback);\n  }\n  loadOne(name) {\n    let prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n    const s = name.split('|');\n    const lng = s[0];\n    const ns = s[1];\n    this.read(lng, ns, 'read', undefined, undefined, (err, data) => {\n      if (err) this.logger.warn(\"\".concat(prefix, \"loading namespace \").concat(ns, \" for language \").concat(lng, \" failed\"), err);\n      if (!err && data) this.logger.log(\"\".concat(prefix, \"loaded namespace \").concat(ns, \" for language \").concat(lng), data);\n      this.loaded(name, err, data);\n    });\n  }\n  saveMissing(languages, namespace, key, fallbackValue, isUpdate) {\n    let options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n    let clb = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : () => {};\n    if (this.services.utils && this.services.utils.hasLoadedNamespace && !this.services.utils.hasLoadedNamespace(namespace)) {\n      this.logger.warn(\"did not save key \\\"\".concat(key, \"\\\" as the namespace \\\"\").concat(namespace, \"\\\" was not yet loaded\"), 'This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!');\n      return;\n    }\n    if (key === undefined || key === null || key === '') return;\n    if (this.backend && this.backend.create) {\n      const opts = {\n        ...options,\n        isUpdate\n      };\n      const fc = this.backend.create.bind(this.backend);\n      if (fc.length < 6) {\n        try {\n          let r;\n          if (fc.length === 5) {\n            r = fc(languages, namespace, key, fallbackValue, opts);\n          } else {\n            r = fc(languages, namespace, key, fallbackValue);\n          }\n          if (r && typeof r.then === 'function') {\n            r.then(data => clb(null, data)).catch(clb);\n          } else {\n            clb(null, r);\n          }\n        } catch (err) {\n          clb(err);\n        }\n      } else {\n        fc(languages, namespace, key, fallbackValue, clb, opts);\n      }\n    }\n    if (!languages || !languages[0]) return;\n    this.store.addResource(languages[0], namespace, key, fallbackValue);\n  }\n}\nfunction get() {\n  return {\n    debug: false,\n    initImmediate: true,\n    ns: ['translation'],\n    defaultNS: ['translation'],\n    fallbackLng: ['dev'],\n    fallbackNS: false,\n    supportedLngs: false,\n    nonExplicitSupportedLngs: false,\n    load: 'all',\n    preload: false,\n    simplifyPluralSuffix: true,\n    keySeparator: '.',\n    nsSeparator: ':',\n    pluralSeparator: '_',\n    contextSeparator: '_',\n    partialBundledLanguages: false,\n    saveMissing: false,\n    updateMissing: false,\n    saveMissingTo: 'fallback',\n    saveMissingPlurals: true,\n    missingKeyHandler: false,\n    missingInterpolationHandler: false,\n    postProcess: false,\n    postProcessPassResolved: false,\n    returnNull: false,\n    returnEmptyString: true,\n    returnObjects: false,\n    joinArrays: false,\n    returnedObjectHandler: false,\n    parseMissingKeyHandler: false,\n    appendNamespaceToMissingKey: false,\n    appendNamespaceToCIMode: false,\n    overloadTranslationOptionHandler: function handle(args) {\n      let ret = {};\n      if (typeof args[1] === 'object') ret = args[1];\n      if (typeof args[1] === 'string') ret.defaultValue = args[1];\n      if (typeof args[2] === 'string') ret.tDescription = args[2];\n      if (typeof args[2] === 'object' || typeof args[3] === 'object') {\n        const options = args[3] || args[2];\n        Object.keys(options).forEach(key => {\n          ret[key] = options[key];\n        });\n      }\n      return ret;\n    },\n    interpolation: {\n      escapeValue: true,\n      format: value => value,\n      prefix: '{{',\n      suffix: '}}',\n      formatSeparator: ',',\n      unescapePrefix: '-',\n      nestingPrefix: '$t(',\n      nestingSuffix: ')',\n      nestingOptionsSeparator: ',',\n      maxReplaces: 1000,\n      skipOnVariables: true\n    }\n  };\n}\nfunction transformOptions(options) {\n  if (typeof options.ns === 'string') options.ns = [options.ns];\n  if (typeof options.fallbackLng === 'string') options.fallbackLng = [options.fallbackLng];\n  if (typeof options.fallbackNS === 'string') options.fallbackNS = [options.fallbackNS];\n  if (options.supportedLngs && options.supportedLngs.indexOf('cimode') < 0) {\n    options.supportedLngs = options.supportedLngs.concat(['cimode']);\n  }\n  return options;\n}\nfunction noop() {}\nfunction bindMemberFunctions(inst) {\n  const mems = Object.getOwnPropertyNames(Object.getPrototypeOf(inst));\n  mems.forEach(mem => {\n    if (typeof inst[mem] === 'function') {\n      inst[mem] = inst[mem].bind(inst);\n    }\n  });\n}\nclass I18n extends EventEmitter {\n  constructor() {\n    let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    let callback = arguments.length > 1 ? arguments[1] : undefined;\n    super();\n    this.options = transformOptions(options);\n    this.services = {};\n    this.logger = baseLogger;\n    this.modules = {\n      external: []\n    };\n    bindMemberFunctions(this);\n    if (callback && !this.isInitialized && !options.isClone) {\n      if (!this.options.initImmediate) {\n        this.init(options, callback);\n        return this;\n      }\n      setTimeout(() => {\n        this.init(options, callback);\n      }, 0);\n    }\n  }\n  init() {\n    var _this = this;\n    let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    let callback = arguments.length > 1 ? arguments[1] : undefined;\n    if (typeof options === 'function') {\n      callback = options;\n      options = {};\n    }\n    if (!options.defaultNS && options.defaultNS !== false && options.ns) {\n      if (typeof options.ns === 'string') {\n        options.defaultNS = options.ns;\n      } else if (options.ns.indexOf('translation') < 0) {\n        options.defaultNS = options.ns[0];\n      }\n    }\n    const defOpts = get();\n    this.options = {\n      ...defOpts,\n      ...this.options,\n      ...transformOptions(options)\n    };\n    if (this.options.compatibilityAPI !== 'v1') {\n      this.options.interpolation = {\n        ...defOpts.interpolation,\n        ...this.options.interpolation\n      };\n    }\n    if (options.keySeparator !== undefined) {\n      this.options.userDefinedKeySeparator = options.keySeparator;\n    }\n    if (options.nsSeparator !== undefined) {\n      this.options.userDefinedNsSeparator = options.nsSeparator;\n    }\n    function createClassOnDemand(ClassOrObject) {\n      if (!ClassOrObject) return null;\n      if (typeof ClassOrObject === 'function') return new ClassOrObject();\n      return ClassOrObject;\n    }\n    if (!this.options.isClone) {\n      if (this.modules.logger) {\n        baseLogger.init(createClassOnDemand(this.modules.logger), this.options);\n      } else {\n        baseLogger.init(null, this.options);\n      }\n      let formatter;\n      if (this.modules.formatter) {\n        formatter = this.modules.formatter;\n      } else if (typeof Intl !== 'undefined') {\n        formatter = Formatter;\n      }\n      const lu = new LanguageUtil(this.options);\n      this.store = new ResourceStore(this.options.resources, this.options);\n      const s = this.services;\n      s.logger = baseLogger;\n      s.resourceStore = this.store;\n      s.languageUtils = lu;\n      s.pluralResolver = new PluralResolver(lu, {\n        prepend: this.options.pluralSeparator,\n        compatibilityJSON: this.options.compatibilityJSON,\n        simplifyPluralSuffix: this.options.simplifyPluralSuffix\n      });\n      if (formatter && (!this.options.interpolation.format || this.options.interpolation.format === defOpts.interpolation.format)) {\n        s.formatter = createClassOnDemand(formatter);\n        s.formatter.init(s, this.options);\n        this.options.interpolation.format = s.formatter.format.bind(s.formatter);\n      }\n      s.interpolator = new Interpolator(this.options);\n      s.utils = {\n        hasLoadedNamespace: this.hasLoadedNamespace.bind(this)\n      };\n      s.backendConnector = new Connector(createClassOnDemand(this.modules.backend), s.resourceStore, s, this.options);\n      s.backendConnector.on('*', function (event) {\n        for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n          args[_key - 1] = arguments[_key];\n        }\n        _this.emit(event, ...args);\n      });\n      if (this.modules.languageDetector) {\n        s.languageDetector = createClassOnDemand(this.modules.languageDetector);\n        if (s.languageDetector.init) s.languageDetector.init(s, this.options.detection, this.options);\n      }\n      if (this.modules.i18nFormat) {\n        s.i18nFormat = createClassOnDemand(this.modules.i18nFormat);\n        if (s.i18nFormat.init) s.i18nFormat.init(this);\n      }\n      this.translator = new Translator(this.services, this.options);\n      this.translator.on('*', function (event) {\n        for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n          args[_key2 - 1] = arguments[_key2];\n        }\n        _this.emit(event, ...args);\n      });\n      this.modules.external.forEach(m => {\n        if (m.init) m.init(this);\n      });\n    }\n    this.format = this.options.interpolation.format;\n    if (!callback) callback = noop;\n    if (this.options.fallbackLng && !this.services.languageDetector && !this.options.lng) {\n      const codes = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);\n      if (codes.length > 0 && codes[0] !== 'dev') this.options.lng = codes[0];\n    }\n    if (!this.services.languageDetector && !this.options.lng) {\n      this.logger.warn('init: no languageDetector is used and no lng is defined');\n    }\n    const storeApi = ['getResource', 'hasResourceBundle', 'getResourceBundle', 'getDataByLanguage'];\n    storeApi.forEach(fcName => {\n      this[fcName] = function () {\n        return _this.store[fcName](...arguments);\n      };\n    });\n    const storeApiChained = ['addResource', 'addResources', 'addResourceBundle', 'removeResourceBundle'];\n    storeApiChained.forEach(fcName => {\n      this[fcName] = function () {\n        _this.store[fcName](...arguments);\n        return _this;\n      };\n    });\n    const deferred = defer();\n    const load = () => {\n      const finish = (err, t) => {\n        if (this.isInitialized && !this.initializedStoreOnce) this.logger.warn('init: i18next is already initialized. You should call init just once!');\n        this.isInitialized = true;\n        if (!this.options.isClone) this.logger.log('initialized', this.options);\n        this.emit('initialized', this.options);\n        deferred.resolve(t);\n        callback(err, t);\n      };\n      if (this.languages && this.options.compatibilityAPI !== 'v1' && !this.isInitialized) return finish(null, this.t.bind(this));\n      this.changeLanguage(this.options.lng, finish);\n    };\n    if (this.options.resources || !this.options.initImmediate) {\n      load();\n    } else {\n      setTimeout(load, 0);\n    }\n    return deferred;\n  }\n  loadResources(language) {\n    let callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;\n    let usedCallback = callback;\n    const usedLng = typeof language === 'string' ? language : this.language;\n    if (typeof language === 'function') usedCallback = language;\n    if (!this.options.resources || this.options.partialBundledLanguages) {\n      if (usedLng && usedLng.toLowerCase() === 'cimode' && (!this.options.preload || this.options.preload.length === 0)) return usedCallback();\n      const toLoad = [];\n      const append = lng => {\n        if (!lng) return;\n        if (lng === 'cimode') return;\n        const lngs = this.services.languageUtils.toResolveHierarchy(lng);\n        lngs.forEach(l => {\n          if (l === 'cimode') return;\n          if (toLoad.indexOf(l) < 0) toLoad.push(l);\n        });\n      };\n      if (!usedLng) {\n        const fallbacks = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);\n        fallbacks.forEach(l => append(l));\n      } else {\n        append(usedLng);\n      }\n      if (this.options.preload) {\n        this.options.preload.forEach(l => append(l));\n      }\n      this.services.backendConnector.load(toLoad, this.options.ns, e => {\n        if (!e && !this.resolvedLanguage && this.language) this.setResolvedLanguage(this.language);\n        usedCallback(e);\n      });\n    } else {\n      usedCallback(null);\n    }\n  }\n  reloadResources(lngs, ns, callback) {\n    const deferred = defer();\n    if (!lngs) lngs = this.languages;\n    if (!ns) ns = this.options.ns;\n    if (!callback) callback = noop;\n    this.services.backendConnector.reload(lngs, ns, err => {\n      deferred.resolve();\n      callback(err);\n    });\n    return deferred;\n  }\n  use(module) {\n    if (!module) throw new Error('You are passing an undefined module! Please check the object you are passing to i18next.use()');\n    if (!module.type) throw new Error('You are passing a wrong module! Please check the object you are passing to i18next.use()');\n    if (module.type === 'backend') {\n      this.modules.backend = module;\n    }\n    if (module.type === 'logger' || module.log && module.warn && module.error) {\n      this.modules.logger = module;\n    }\n    if (module.type === 'languageDetector') {\n      this.modules.languageDetector = module;\n    }\n    if (module.type === 'i18nFormat') {\n      this.modules.i18nFormat = module;\n    }\n    if (module.type === 'postProcessor') {\n      postProcessor.addPostProcessor(module);\n    }\n    if (module.type === 'formatter') {\n      this.modules.formatter = module;\n    }\n    if (module.type === '3rdParty') {\n      this.modules.external.push(module);\n    }\n    return this;\n  }\n  setResolvedLanguage(l) {\n    if (!l || !this.languages) return;\n    if (['cimode', 'dev'].indexOf(l) > -1) return;\n    for (let li = 0; li < this.languages.length; li++) {\n      const lngInLngs = this.languages[li];\n      if (['cimode', 'dev'].indexOf(lngInLngs) > -1) continue;\n      if (this.store.hasLanguageSomeTranslations(lngInLngs)) {\n        this.resolvedLanguage = lngInLngs;\n        break;\n      }\n    }\n  }\n  changeLanguage(lng, callback) {\n    var _this2 = this;\n    this.isLanguageChangingTo = lng;\n    const deferred = defer();\n    this.emit('languageChanging', lng);\n    const setLngProps = l => {\n      this.language = l;\n      this.languages = this.services.languageUtils.toResolveHierarchy(l);\n      this.resolvedLanguage = undefined;\n      this.setResolvedLanguage(l);\n    };\n    const done = (err, l) => {\n      if (l) {\n        setLngProps(l);\n        this.translator.changeLanguage(l);\n        this.isLanguageChangingTo = undefined;\n        this.emit('languageChanged', l);\n        this.logger.log('languageChanged', l);\n      } else {\n        this.isLanguageChangingTo = undefined;\n      }\n      deferred.resolve(function () {\n        return _this2.t(...arguments);\n      });\n      if (callback) callback(err, function () {\n        return _this2.t(...arguments);\n      });\n    };\n    const setLng = lngs => {\n      if (!lng && !lngs && this.services.languageDetector) lngs = [];\n      const l = typeof lngs === 'string' ? lngs : this.services.languageUtils.getBestMatchFromCodes(lngs);\n      if (l) {\n        if (!this.language) {\n          setLngProps(l);\n        }\n        if (!this.translator.language) this.translator.changeLanguage(l);\n        if (this.services.languageDetector && this.services.languageDetector.cacheUserLanguage) this.services.languageDetector.cacheUserLanguage(l);\n      }\n      this.loadResources(l, err => {\n        done(err, l);\n      });\n    };\n    if (!lng && this.services.languageDetector && !this.services.languageDetector.async) {\n      setLng(this.services.languageDetector.detect());\n    } else if (!lng && this.services.languageDetector && this.services.languageDetector.async) {\n      if (this.services.languageDetector.detect.length === 0) {\n        this.services.languageDetector.detect().then(setLng);\n      } else {\n        this.services.languageDetector.detect(setLng);\n      }\n    } else {\n      setLng(lng);\n    }\n    return deferred;\n  }\n  getFixedT(lng, ns, keyPrefix) {\n    var _this3 = this;\n    const fixedT = function (key, opts) {\n      let options;\n      if (typeof opts !== 'object') {\n        for (var _len3 = arguments.length, rest = new Array(_len3 > 2 ? _len3 - 2 : 0), _key3 = 2; _key3 < _len3; _key3++) {\n          rest[_key3 - 2] = arguments[_key3];\n        }\n        options = _this3.options.overloadTranslationOptionHandler([key, opts].concat(rest));\n      } else {\n        options = {\n          ...opts\n        };\n      }\n      options.lng = options.lng || fixedT.lng;\n      options.lngs = options.lngs || fixedT.lngs;\n      options.ns = options.ns || fixedT.ns;\n      options.keyPrefix = options.keyPrefix || keyPrefix || fixedT.keyPrefix;\n      const keySeparator = _this3.options.keySeparator || '.';\n      let resultKey;\n      if (options.keyPrefix && Array.isArray(key)) {\n        resultKey = key.map(k => \"\".concat(options.keyPrefix).concat(keySeparator).concat(k));\n      } else {\n        resultKey = options.keyPrefix ? \"\".concat(options.keyPrefix).concat(keySeparator).concat(key) : key;\n      }\n      return _this3.t(resultKey, options);\n    };\n    if (typeof lng === 'string') {\n      fixedT.lng = lng;\n    } else {\n      fixedT.lngs = lng;\n    }\n    fixedT.ns = ns;\n    fixedT.keyPrefix = keyPrefix;\n    return fixedT;\n  }\n  t() {\n    return this.translator && this.translator.translate(...arguments);\n  }\n  exists() {\n    return this.translator && this.translator.exists(...arguments);\n  }\n  setDefaultNamespace(ns) {\n    this.options.defaultNS = ns;\n  }\n  hasLoadedNamespace(ns) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    if (!this.isInitialized) {\n      this.logger.warn('hasLoadedNamespace: i18next was not initialized', this.languages);\n      return false;\n    }\n    if (!this.languages || !this.languages.length) {\n      this.logger.warn('hasLoadedNamespace: i18n.languages were undefined or empty', this.languages);\n      return false;\n    }\n    const lng = options.lng || this.resolvedLanguage || this.languages[0];\n    const fallbackLng = this.options ? this.options.fallbackLng : false;\n    const lastLng = this.languages[this.languages.length - 1];\n    if (lng.toLowerCase() === 'cimode') return true;\n    const loadNotPending = (l, n) => {\n      const loadState = this.services.backendConnector.state[\"\".concat(l, \"|\").concat(n)];\n      return loadState === -1 || loadState === 2;\n    };\n    if (options.precheck) {\n      const preResult = options.precheck(this, loadNotPending);\n      if (preResult !== undefined) return preResult;\n    }\n    if (this.hasResourceBundle(lng, ns)) return true;\n    if (!this.services.backendConnector.backend || this.options.resources && !this.options.partialBundledLanguages) return true;\n    if (loadNotPending(lng, ns) && (!fallbackLng || loadNotPending(lastLng, ns))) return true;\n    return false;\n  }\n  loadNamespaces(ns, callback) {\n    const deferred = defer();\n    if (!this.options.ns) {\n      if (callback) callback();\n      return Promise.resolve();\n    }\n    if (typeof ns === 'string') ns = [ns];\n    ns.forEach(n => {\n      if (this.options.ns.indexOf(n) < 0) this.options.ns.push(n);\n    });\n    this.loadResources(err => {\n      deferred.resolve();\n      if (callback) callback(err);\n    });\n    return deferred;\n  }\n  loadLanguages(lngs, callback) {\n    const deferred = defer();\n    if (typeof lngs === 'string') lngs = [lngs];\n    const preloaded = this.options.preload || [];\n    const newLngs = lngs.filter(lng => preloaded.indexOf(lng) < 0);\n    if (!newLngs.length) {\n      if (callback) callback();\n      return Promise.resolve();\n    }\n    this.options.preload = preloaded.concat(newLngs);\n    this.loadResources(err => {\n      deferred.resolve();\n      if (callback) callback(err);\n    });\n    return deferred;\n  }\n  dir(lng) {\n    if (!lng) lng = this.resolvedLanguage || (this.languages && this.languages.length > 0 ? this.languages[0] : this.language);\n    if (!lng) return 'rtl';\n    const rtlLngs = ['ar', 'shu', 'sqr', 'ssh', 'xaa', 'yhd', 'yud', 'aao', 'abh', 'abv', 'acm', 'acq', 'acw', 'acx', 'acy', 'adf', 'ads', 'aeb', 'aec', 'afb', 'ajp', 'apc', 'apd', 'arb', 'arq', 'ars', 'ary', 'arz', 'auz', 'avl', 'ayh', 'ayl', 'ayn', 'ayp', 'bbz', 'pga', 'he', 'iw', 'ps', 'pbt', 'pbu', 'pst', 'prp', 'prd', 'ug', 'ur', 'ydd', 'yds', 'yih', 'ji', 'yi', 'hbo', 'men', 'xmn', 'fa', 'jpr', 'peo', 'pes', 'prs', 'dv', 'sam', 'ckb'];\n    const languageUtils = this.services && this.services.languageUtils || new LanguageUtil(get());\n    return rtlLngs.indexOf(languageUtils.getLanguagePartFromCode(lng)) > -1 || lng.toLowerCase().indexOf('-arab') > 1 ? 'rtl' : 'ltr';\n  }\n  static createInstance() {\n    let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    let callback = arguments.length > 1 ? arguments[1] : undefined;\n    return new I18n(options, callback);\n  }\n  cloneInstance() {\n    let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    let callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;\n    const forkResourceStore = options.forkResourceStore;\n    if (forkResourceStore) delete options.forkResourceStore;\n    const mergedOptions = {\n      ...this.options,\n      ...options,\n      ...{\n        isClone: true\n      }\n    };\n    const clone = new I18n(mergedOptions);\n    if (options.debug !== undefined || options.prefix !== undefined) {\n      clone.logger = clone.logger.clone(options);\n    }\n    const membersToCopy = ['store', 'services', 'language'];\n    membersToCopy.forEach(m => {\n      clone[m] = this[m];\n    });\n    clone.services = {\n      ...this.services\n    };\n    clone.services.utils = {\n      hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone)\n    };\n    if (forkResourceStore) {\n      clone.store = new ResourceStore(this.store.data, mergedOptions);\n      clone.services.resourceStore = clone.store;\n    }\n    clone.translator = new Translator(clone.services, mergedOptions);\n    clone.translator.on('*', function (event) {\n      for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n        args[_key4 - 1] = arguments[_key4];\n      }\n      clone.emit(event, ...args);\n    });\n    clone.init(mergedOptions, callback);\n    clone.translator.options = mergedOptions;\n    clone.translator.backendConnector.services.utils = {\n      hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone)\n    };\n    return clone;\n  }\n  toJSON() {\n    return {\n      options: this.options,\n      store: this.store,\n      language: this.language,\n      languages: this.languages,\n      resolvedLanguage: this.resolvedLanguage\n    };\n  }\n}\nconst instance = I18n.createInstance();\ninstance.createInstance = I18n.createInstance;\nconst createInstance = instance.createInstance;\nconst dir = instance.dir;\nconst init = instance.init;\nconst loadResources = instance.loadResources;\nconst reloadResources = instance.reloadResources;\nconst use = instance.use;\nconst changeLanguage = instance.changeLanguage;\nconst getFixedT = instance.getFixedT;\nconst t = instance.t;\nconst exists = instance.exists;\nconst setDefaultNamespace = instance.setDefaultNamespace;\nconst hasLoadedNamespace = instance.hasLoadedNamespace;\nconst loadNamespaces = instance.loadNamespaces;\nconst loadLanguages = instance.loadLanguages;\nexport { changeLanguage, createInstance, instance as default, dir, exists, getFixedT, hasLoadedNamespace, init, loadLanguages, loadNamespaces, loadResources, reloadResources, setDefaultNamespace, t, use };","map":{"version":3,"names":["consoleLogger","type","log","args","output","warn","error","console","apply","Logger","constructor","concreteLogger","options","arguments","length","undefined","init","prefix","logger","debug","_len","Array","_key","forward","_len2","_key2","_len3","_key3","deprecate","_len4","_key4","lvl","debugOnly","concat","create","moduleName","clone","baseLogger","EventEmitter","observers","on","events","listener","split","forEach","event","Map","numListeners","get","set","off","delete","emit","cloned","from","entries","_ref","observer","numTimesAdded","i","_ref2","defer","res","rej","promise","Promise","resolve","reject","makeString","object","copy","a","s","t","m","lastOfPathSeparatorRegExp","getLastOfPath","path","Empty","cleanKey","key","indexOf","replace","canNotTraverseDeeper","stack","stackIndex","Object","prototype","hasOwnProperty","call","obj","k","setPath","newValue","e","p","slice","last","pushPath","push","getPath","getPathWithDefaults","data","defaultData","value","deepExtend","target","source","overwrite","prop","String","regexEscape","str","_entityMap","escape","RegExpCache","capacity","regExpMap","regExpQueue","getRegExp","pattern","regExpFromCache","regExpNew","RegExp","shift","chars","looksLikeObjectPathRegExpCache","looksLikeObjectPath","nsSeparator","keySeparator","possibleChars","filter","c","r","map","join","matched","test","ki","substring","deepFind","tokens","current","next","nextPath","j","getCleanedCode","code","ResourceStore","ns","defaultNS","ignoreJSONStructure","addNamespaces","removeNamespaces","index","splice","getResource","lng","isArray","result","addResource","silent","addResources","resources","toString","addResourceBundle","deep","pack","removeResourceBundle","hasResourceBundle","getResourceBundle","compatibilityAPI","getDataByLanguage","hasLanguageSomeTranslations","n","keys","find","v","toJSON","postProcessor","processors","addPostProcessor","module","name","handle","translator","processor","process","checkedLoadedFor","Translator","services","changeLanguage","language","exists","interpolation","resolved","extractFromKey","namespaces","wouldCheckForNsInKey","seemsNaturalLanguage","userDefinedKeySeparator","userDefinedNsSeparator","match","interpolator","nestingRegexp","parts","translate","lastKey","overloadTranslationOptionHandler","returnDetails","namespace","appendNamespaceToCIMode","toLowerCase","usedKey","exactUsedKey","usedLng","usedNS","usedParams","getUsedParamsDetails","resUsedKey","resExactUsedKey","resType","noObject","joinArrays","handleAsObjectInI18nFormat","i18nFormat","handleAsObject","returnObjects","returnedObjectHandler","resTypeIsArray","newKeyToUse","deepKey","extendTranslation","usedDefault","needsPluralHandling","count","hasDefaultValue","defaultValueSuffix","pluralResolver","getSuffix","defaultValueSuffixOrdinalFallback","ordinal","needsZeroSuffixLookup","shouldUseIntlApi","defaultValue","pluralSeparator","isValidLookup","missingKeyNoValueFallbackToKey","resForMissing","updateMissing","fk","lngs","fallbackLngs","languageUtils","getFallbackCodes","fallbackLng","saveMissingTo","toResolveHierarchy","send","l","specificDefaultValue","defaultForMissing","missingKeyHandler","backendConnector","saveMissing","saveMissingPlurals","suffixes","getSuffixes","suffix","appendNamespaceToMissingKey","parseMissingKeyHandler","_this","parse","defaultVariables","skipInterpolation","skipOnVariables","nestBef","nb","interpolate","na","nestAft","nest","context","reset","postProcess","postProcessorNames","applyPostProcessor","postProcessPassResolved","i18nResolved","found","extracted","fallbackNS","needsContextHandling","codes","utils","hasLoadedNamespace","finalKeys","addLookupKeys","pluralSuffix","zeroSuffix","ordinalPrefix","contextKey","contextSeparator","possibleKey","pop","returnNull","returnEmptyString","resourceStore","optionsKeys","useOptionsReplaceForData","option","capitalize","string","charAt","toUpperCase","LanguageUtil","supportedLngs","getScriptPartFromCode","formatLanguageCode","getLanguagePartFromCode","specialCases","lowerCaseLng","part","cleanCode","isSupportedCode","load","nonExplicitSupportedLngs","getBestMatchFromCodes","cleanedLng","lngOnly","supportedLng","fallbacks","default","fallbackCode","fallbackCodes","addCode","fc","sets","nr","_rulesPluralsTypes","Number","nonIntlVersions","intlVersions","suffixesOrder","zero","one","two","few","many","other","createRules","rules","numbers","plurals","PluralResolver","compatibilityJSON","includes","Intl","PluralRules","addRule","getRule","err","needsPlural","rule","resolvedOptions","pluralCategories","getPluralFormsOfKey","sort","pluralCategory1","pluralCategory2","pluralCategory","prepend","number","select","getSuffixRetroCompatible","idx","noAbs","Math","abs","simplifyPluralSuffix","returnSuffix","deepFindWithDefaults","Interpolator","format","escapeValue","iOpts","useRawValueToEscape","prefixEscaped","suffixEscaped","formatSeparator","unescapePrefix","unescapeSuffix","nestingPrefix","nestingPrefixEscaped","nestingSuffix","nestingSuffixEscaped","nestingOptionsSeparator","maxReplaces","alwaysFormat","resetRegExp","getOrResetRegExp","existingRegExp","lastIndex","regexp","regexpUnescape","replaces","regexSafe","val","handleFormat","interpolationkey","trim","f","missingInterpolationHandler","todos","regex","safeValue","todo","exec","matchedVar","temp","clonedOptions","handleHasOptions","inheritedOptions","sep","optionsString","matchedSingleQuotes","matchedDoubleQuotes","JSON","formatters","doReduce","elem","reduce","parseFormatStr","formatStr","formatName","formatOptions","optStr","currency","range","opts","opt","rest","isNaN","parseInt","createCachedFormatter","fn","cache","invokeFormatter","stringify","formatter","Formatter","formats","NumberFormat","style","datetime","DateTimeFormat","relativetime","RelativeTimeFormat","list","ListFormat","add","addCached","mem","formatted","valOptions","formatParams","locale","removePending","q","pending","pendingCount","Connector","backend","store","waitingReads","maxParallelReads","readingCalls","maxRetries","retryTimeout","state","queue","queueLoad","languages","callback","toLoad","toLoadLanguages","toLoadNamespaces","hasAllNamespaces","reload","loaded","errors","done","loadedKeys","read","fcName","tried","wait","resolver","setTimeout","bind","then","catch","prepareLoading","loadOne","fallbackValue","isUpdate","clb","initImmediate","preload","partialBundledLanguages","ret","tDescription","transformOptions","noop","bindMemberFunctions","inst","mems","getOwnPropertyNames","getPrototypeOf","I18n","modules","external","isInitialized","isClone","defOpts","createClassOnDemand","ClassOrObject","lu","languageDetector","detection","storeApi","storeApiChained","deferred","finish","initializedStoreOnce","loadResources","usedCallback","append","resolvedLanguage","setResolvedLanguage","reloadResources","use","Error","li","lngInLngs","_this2","isLanguageChangingTo","setLngProps","setLng","cacheUserLanguage","async","detect","getFixedT","keyPrefix","_this3","fixedT","resultKey","setDefaultNamespace","lastLng","loadNotPending","loadState","precheck","preResult","loadNamespaces","loadLanguages","preloaded","newLngs","dir","rtlLngs","createInstance","cloneInstance","forkResourceStore","mergedOptions","membersToCopy","instance"],"sources":["/opt/bitnami/minigames/frasle/node_modules/i18next/dist/esm/i18next.js"],"sourcesContent":["const consoleLogger = {\n  type: 'logger',\n  log(args) {\n    this.output('log', args);\n  },\n  warn(args) {\n    this.output('warn', args);\n  },\n  error(args) {\n    this.output('error', args);\n  },\n  output(type, args) {\n    if (console && console[type]) console[type].apply(console, args);\n  }\n};\nclass Logger {\n  constructor(concreteLogger) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    this.init(concreteLogger, options);\n  }\n  init(concreteLogger) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    this.prefix = options.prefix || 'i18next:';\n    this.logger = concreteLogger || consoleLogger;\n    this.options = options;\n    this.debug = options.debug;\n  }\n  log() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    return this.forward(args, 'log', '', true);\n  }\n  warn() {\n    for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      args[_key2] = arguments[_key2];\n    }\n    return this.forward(args, 'warn', '', true);\n  }\n  error() {\n    for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n      args[_key3] = arguments[_key3];\n    }\n    return this.forward(args, 'error', '');\n  }\n  deprecate() {\n    for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n      args[_key4] = arguments[_key4];\n    }\n    return this.forward(args, 'warn', 'WARNING DEPRECATED: ', true);\n  }\n  forward(args, lvl, prefix, debugOnly) {\n    if (debugOnly && !this.debug) return null;\n    if (typeof args[0] === 'string') args[0] = `${prefix}${this.prefix} ${args[0]}`;\n    return this.logger[lvl](args);\n  }\n  create(moduleName) {\n    return new Logger(this.logger, {\n      ...{\n        prefix: `${this.prefix}:${moduleName}:`\n      },\n      ...this.options\n    });\n  }\n  clone(options) {\n    options = options || this.options;\n    options.prefix = options.prefix || this.prefix;\n    return new Logger(this.logger, options);\n  }\n}\nvar baseLogger = new Logger();\n\nclass EventEmitter {\n  constructor() {\n    this.observers = {};\n  }\n  on(events, listener) {\n    events.split(' ').forEach(event => {\n      if (!this.observers[event]) this.observers[event] = new Map();\n      const numListeners = this.observers[event].get(listener) || 0;\n      this.observers[event].set(listener, numListeners + 1);\n    });\n    return this;\n  }\n  off(event, listener) {\n    if (!this.observers[event]) return;\n    if (!listener) {\n      delete this.observers[event];\n      return;\n    }\n    this.observers[event].delete(listener);\n  }\n  emit(event) {\n    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n    if (this.observers[event]) {\n      const cloned = Array.from(this.observers[event].entries());\n      cloned.forEach(_ref => {\n        let [observer, numTimesAdded] = _ref;\n        for (let i = 0; i < numTimesAdded; i++) {\n          observer(...args);\n        }\n      });\n    }\n    if (this.observers['*']) {\n      const cloned = Array.from(this.observers['*'].entries());\n      cloned.forEach(_ref2 => {\n        let [observer, numTimesAdded] = _ref2;\n        for (let i = 0; i < numTimesAdded; i++) {\n          observer.apply(observer, [event, ...args]);\n        }\n      });\n    }\n  }\n}\n\nfunction defer() {\n  let res;\n  let rej;\n  const promise = new Promise((resolve, reject) => {\n    res = resolve;\n    rej = reject;\n  });\n  promise.resolve = res;\n  promise.reject = rej;\n  return promise;\n}\nfunction makeString(object) {\n  if (object == null) return '';\n  return '' + object;\n}\nfunction copy(a, s, t) {\n  a.forEach(m => {\n    if (s[m]) t[m] = s[m];\n  });\n}\nconst lastOfPathSeparatorRegExp = /###/g;\nfunction getLastOfPath(object, path, Empty) {\n  function cleanKey(key) {\n    return key && key.indexOf('###') > -1 ? key.replace(lastOfPathSeparatorRegExp, '.') : key;\n  }\n  function canNotTraverseDeeper() {\n    return !object || typeof object === 'string';\n  }\n  const stack = typeof path !== 'string' ? path : path.split('.');\n  let stackIndex = 0;\n  while (stackIndex < stack.length - 1) {\n    if (canNotTraverseDeeper()) return {};\n    const key = cleanKey(stack[stackIndex]);\n    if (!object[key] && Empty) object[key] = new Empty();\n    if (Object.prototype.hasOwnProperty.call(object, key)) {\n      object = object[key];\n    } else {\n      object = {};\n    }\n    ++stackIndex;\n  }\n  if (canNotTraverseDeeper()) return {};\n  return {\n    obj: object,\n    k: cleanKey(stack[stackIndex])\n  };\n}\nfunction setPath(object, path, newValue) {\n  const {\n    obj,\n    k\n  } = getLastOfPath(object, path, Object);\n  if (obj !== undefined || path.length === 1) {\n    obj[k] = newValue;\n    return;\n  }\n  let e = path[path.length - 1];\n  let p = path.slice(0, path.length - 1);\n  let last = getLastOfPath(object, p, Object);\n  while (last.obj === undefined && p.length) {\n    e = `${p[p.length - 1]}.${e}`;\n    p = p.slice(0, p.length - 1);\n    last = getLastOfPath(object, p, Object);\n    if (last && last.obj && typeof last.obj[`${last.k}.${e}`] !== 'undefined') {\n      last.obj = undefined;\n    }\n  }\n  last.obj[`${last.k}.${e}`] = newValue;\n}\nfunction pushPath(object, path, newValue, concat) {\n  const {\n    obj,\n    k\n  } = getLastOfPath(object, path, Object);\n  obj[k] = obj[k] || [];\n  if (concat) obj[k] = obj[k].concat(newValue);\n  if (!concat) obj[k].push(newValue);\n}\nfunction getPath(object, path) {\n  const {\n    obj,\n    k\n  } = getLastOfPath(object, path);\n  if (!obj) return undefined;\n  return obj[k];\n}\nfunction getPathWithDefaults(data, defaultData, key) {\n  const value = getPath(data, key);\n  if (value !== undefined) {\n    return value;\n  }\n  return getPath(defaultData, key);\n}\nfunction deepExtend(target, source, overwrite) {\n  for (const prop in source) {\n    if (prop !== '__proto__' && prop !== 'constructor') {\n      if (prop in target) {\n        if (typeof target[prop] === 'string' || target[prop] instanceof String || typeof source[prop] === 'string' || source[prop] instanceof String) {\n          if (overwrite) target[prop] = source[prop];\n        } else {\n          deepExtend(target[prop], source[prop], overwrite);\n        }\n      } else {\n        target[prop] = source[prop];\n      }\n    }\n  }\n  return target;\n}\nfunction regexEscape(str) {\n  return str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\n}\nvar _entityMap = {\n  '&': '&amp;',\n  '<': '&lt;',\n  '>': '&gt;',\n  '\"': '&quot;',\n  \"'\": '&#39;',\n  '/': '&#x2F;'\n};\nfunction escape(data) {\n  if (typeof data === 'string') {\n    return data.replace(/[&<>\"'\\/]/g, s => _entityMap[s]);\n  }\n  return data;\n}\nclass RegExpCache {\n  constructor(capacity) {\n    this.capacity = capacity;\n    this.regExpMap = new Map();\n    this.regExpQueue = [];\n  }\n  getRegExp(pattern) {\n    const regExpFromCache = this.regExpMap.get(pattern);\n    if (regExpFromCache !== undefined) {\n      return regExpFromCache;\n    }\n    const regExpNew = new RegExp(pattern);\n    if (this.regExpQueue.length === this.capacity) {\n      this.regExpMap.delete(this.regExpQueue.shift());\n    }\n    this.regExpMap.set(pattern, regExpNew);\n    this.regExpQueue.push(pattern);\n    return regExpNew;\n  }\n}\nconst chars = [' ', ',', '?', '!', ';'];\nconst looksLikeObjectPathRegExpCache = new RegExpCache(20);\nfunction looksLikeObjectPath(key, nsSeparator, keySeparator) {\n  nsSeparator = nsSeparator || '';\n  keySeparator = keySeparator || '';\n  const possibleChars = chars.filter(c => nsSeparator.indexOf(c) < 0 && keySeparator.indexOf(c) < 0);\n  if (possibleChars.length === 0) return true;\n  const r = looksLikeObjectPathRegExpCache.getRegExp(`(${possibleChars.map(c => c === '?' ? '\\\\?' : c).join('|')})`);\n  let matched = !r.test(key);\n  if (!matched) {\n    const ki = key.indexOf(keySeparator);\n    if (ki > 0 && !r.test(key.substring(0, ki))) {\n      matched = true;\n    }\n  }\n  return matched;\n}\nfunction deepFind(obj, path) {\n  let keySeparator = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '.';\n  if (!obj) return undefined;\n  if (obj[path]) return obj[path];\n  const tokens = path.split(keySeparator);\n  let current = obj;\n  for (let i = 0; i < tokens.length;) {\n    if (!current || typeof current !== 'object') {\n      return undefined;\n    }\n    let next;\n    let nextPath = '';\n    for (let j = i; j < tokens.length; ++j) {\n      if (j !== i) {\n        nextPath += keySeparator;\n      }\n      nextPath += tokens[j];\n      next = current[nextPath];\n      if (next !== undefined) {\n        if (['string', 'number', 'boolean'].indexOf(typeof next) > -1 && j < tokens.length - 1) {\n          continue;\n        }\n        i += j - i + 1;\n        break;\n      }\n    }\n    current = next;\n  }\n  return current;\n}\nfunction getCleanedCode(code) {\n  if (code && code.indexOf('_') > 0) return code.replace('_', '-');\n  return code;\n}\n\nclass ResourceStore extends EventEmitter {\n  constructor(data) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n      ns: ['translation'],\n      defaultNS: 'translation'\n    };\n    super();\n    this.data = data || {};\n    this.options = options;\n    if (this.options.keySeparator === undefined) {\n      this.options.keySeparator = '.';\n    }\n    if (this.options.ignoreJSONStructure === undefined) {\n      this.options.ignoreJSONStructure = true;\n    }\n  }\n  addNamespaces(ns) {\n    if (this.options.ns.indexOf(ns) < 0) {\n      this.options.ns.push(ns);\n    }\n  }\n  removeNamespaces(ns) {\n    const index = this.options.ns.indexOf(ns);\n    if (index > -1) {\n      this.options.ns.splice(index, 1);\n    }\n  }\n  getResource(lng, ns, key) {\n    let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n    const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n    const ignoreJSONStructure = options.ignoreJSONStructure !== undefined ? options.ignoreJSONStructure : this.options.ignoreJSONStructure;\n    let path;\n    if (lng.indexOf('.') > -1) {\n      path = lng.split('.');\n    } else {\n      path = [lng, ns];\n      if (key) {\n        if (Array.isArray(key)) {\n          path.push(...key);\n        } else if (typeof key === 'string' && keySeparator) {\n          path.push(...key.split(keySeparator));\n        } else {\n          path.push(key);\n        }\n      }\n    }\n    const result = getPath(this.data, path);\n    if (!result && !ns && !key && lng.indexOf('.') > -1) {\n      lng = path[0];\n      ns = path[1];\n      key = path.slice(2).join('.');\n    }\n    if (result || !ignoreJSONStructure || typeof key !== 'string') return result;\n    return deepFind(this.data && this.data[lng] && this.data[lng][ns], key, keySeparator);\n  }\n  addResource(lng, ns, key, value) {\n    let options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {\n      silent: false\n    };\n    const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n    let path = [lng, ns];\n    if (key) path = path.concat(keySeparator ? key.split(keySeparator) : key);\n    if (lng.indexOf('.') > -1) {\n      path = lng.split('.');\n      value = ns;\n      ns = path[1];\n    }\n    this.addNamespaces(ns);\n    setPath(this.data, path, value);\n    if (!options.silent) this.emit('added', lng, ns, key, value);\n  }\n  addResources(lng, ns, resources) {\n    let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {\n      silent: false\n    };\n    for (const m in resources) {\n      if (typeof resources[m] === 'string' || Object.prototype.toString.apply(resources[m]) === '[object Array]') this.addResource(lng, ns, m, resources[m], {\n        silent: true\n      });\n    }\n    if (!options.silent) this.emit('added', lng, ns, resources);\n  }\n  addResourceBundle(lng, ns, resources, deep, overwrite) {\n    let options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {\n      silent: false\n    };\n    let path = [lng, ns];\n    if (lng.indexOf('.') > -1) {\n      path = lng.split('.');\n      deep = resources;\n      resources = ns;\n      ns = path[1];\n    }\n    this.addNamespaces(ns);\n    let pack = getPath(this.data, path) || {};\n    if (deep) {\n      deepExtend(pack, resources, overwrite);\n    } else {\n      pack = {\n        ...pack,\n        ...resources\n      };\n    }\n    setPath(this.data, path, pack);\n    if (!options.silent) this.emit('added', lng, ns, resources);\n  }\n  removeResourceBundle(lng, ns) {\n    if (this.hasResourceBundle(lng, ns)) {\n      delete this.data[lng][ns];\n    }\n    this.removeNamespaces(ns);\n    this.emit('removed', lng, ns);\n  }\n  hasResourceBundle(lng, ns) {\n    return this.getResource(lng, ns) !== undefined;\n  }\n  getResourceBundle(lng, ns) {\n    if (!ns) ns = this.options.defaultNS;\n    if (this.options.compatibilityAPI === 'v1') return {\n      ...{},\n      ...this.getResource(lng, ns)\n    };\n    return this.getResource(lng, ns);\n  }\n  getDataByLanguage(lng) {\n    return this.data[lng];\n  }\n  hasLanguageSomeTranslations(lng) {\n    const data = this.getDataByLanguage(lng);\n    const n = data && Object.keys(data) || [];\n    return !!n.find(v => data[v] && Object.keys(data[v]).length > 0);\n  }\n  toJSON() {\n    return this.data;\n  }\n}\n\nvar postProcessor = {\n  processors: {},\n  addPostProcessor(module) {\n    this.processors[module.name] = module;\n  },\n  handle(processors, value, key, options, translator) {\n    processors.forEach(processor => {\n      if (this.processors[processor]) value = this.processors[processor].process(value, key, options, translator);\n    });\n    return value;\n  }\n};\n\nconst checkedLoadedFor = {};\nclass Translator extends EventEmitter {\n  constructor(services) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    super();\n    copy(['resourceStore', 'languageUtils', 'pluralResolver', 'interpolator', 'backendConnector', 'i18nFormat', 'utils'], services, this);\n    this.options = options;\n    if (this.options.keySeparator === undefined) {\n      this.options.keySeparator = '.';\n    }\n    this.logger = baseLogger.create('translator');\n  }\n  changeLanguage(lng) {\n    if (lng) this.language = lng;\n  }\n  exists(key) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n      interpolation: {}\n    };\n    if (key === undefined || key === null) {\n      return false;\n    }\n    const resolved = this.resolve(key, options);\n    return resolved && resolved.res !== undefined;\n  }\n  extractFromKey(key, options) {\n    let nsSeparator = options.nsSeparator !== undefined ? options.nsSeparator : this.options.nsSeparator;\n    if (nsSeparator === undefined) nsSeparator = ':';\n    const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n    let namespaces = options.ns || this.options.defaultNS || [];\n    const wouldCheckForNsInKey = nsSeparator && key.indexOf(nsSeparator) > -1;\n    const seemsNaturalLanguage = !this.options.userDefinedKeySeparator && !options.keySeparator && !this.options.userDefinedNsSeparator && !options.nsSeparator && !looksLikeObjectPath(key, nsSeparator, keySeparator);\n    if (wouldCheckForNsInKey && !seemsNaturalLanguage) {\n      const m = key.match(this.interpolator.nestingRegexp);\n      if (m && m.length > 0) {\n        return {\n          key,\n          namespaces\n        };\n      }\n      const parts = key.split(nsSeparator);\n      if (nsSeparator !== keySeparator || nsSeparator === keySeparator && this.options.ns.indexOf(parts[0]) > -1) namespaces = parts.shift();\n      key = parts.join(keySeparator);\n    }\n    if (typeof namespaces === 'string') namespaces = [namespaces];\n    return {\n      key,\n      namespaces\n    };\n  }\n  translate(keys, options, lastKey) {\n    if (typeof options !== 'object' && this.options.overloadTranslationOptionHandler) {\n      options = this.options.overloadTranslationOptionHandler(arguments);\n    }\n    if (typeof options === 'object') options = {\n      ...options\n    };\n    if (!options) options = {};\n    if (keys === undefined || keys === null) return '';\n    if (!Array.isArray(keys)) keys = [String(keys)];\n    const returnDetails = options.returnDetails !== undefined ? options.returnDetails : this.options.returnDetails;\n    const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n    const {\n      key,\n      namespaces\n    } = this.extractFromKey(keys[keys.length - 1], options);\n    const namespace = namespaces[namespaces.length - 1];\n    const lng = options.lng || this.language;\n    const appendNamespaceToCIMode = options.appendNamespaceToCIMode || this.options.appendNamespaceToCIMode;\n    if (lng && lng.toLowerCase() === 'cimode') {\n      if (appendNamespaceToCIMode) {\n        const nsSeparator = options.nsSeparator || this.options.nsSeparator;\n        if (returnDetails) {\n          return {\n            res: `${namespace}${nsSeparator}${key}`,\n            usedKey: key,\n            exactUsedKey: key,\n            usedLng: lng,\n            usedNS: namespace,\n            usedParams: this.getUsedParamsDetails(options)\n          };\n        }\n        return `${namespace}${nsSeparator}${key}`;\n      }\n      if (returnDetails) {\n        return {\n          res: key,\n          usedKey: key,\n          exactUsedKey: key,\n          usedLng: lng,\n          usedNS: namespace,\n          usedParams: this.getUsedParamsDetails(options)\n        };\n      }\n      return key;\n    }\n    const resolved = this.resolve(keys, options);\n    let res = resolved && resolved.res;\n    const resUsedKey = resolved && resolved.usedKey || key;\n    const resExactUsedKey = resolved && resolved.exactUsedKey || key;\n    const resType = Object.prototype.toString.apply(res);\n    const noObject = ['[object Number]', '[object Function]', '[object RegExp]'];\n    const joinArrays = options.joinArrays !== undefined ? options.joinArrays : this.options.joinArrays;\n    const handleAsObjectInI18nFormat = !this.i18nFormat || this.i18nFormat.handleAsObject;\n    const handleAsObject = typeof res !== 'string' && typeof res !== 'boolean' && typeof res !== 'number';\n    if (handleAsObjectInI18nFormat && res && handleAsObject && noObject.indexOf(resType) < 0 && !(typeof joinArrays === 'string' && resType === '[object Array]')) {\n      if (!options.returnObjects && !this.options.returnObjects) {\n        if (!this.options.returnedObjectHandler) {\n          this.logger.warn('accessing an object - but returnObjects options is not enabled!');\n        }\n        const r = this.options.returnedObjectHandler ? this.options.returnedObjectHandler(resUsedKey, res, {\n          ...options,\n          ns: namespaces\n        }) : `key '${key} (${this.language})' returned an object instead of string.`;\n        if (returnDetails) {\n          resolved.res = r;\n          resolved.usedParams = this.getUsedParamsDetails(options);\n          return resolved;\n        }\n        return r;\n      }\n      if (keySeparator) {\n        const resTypeIsArray = resType === '[object Array]';\n        const copy = resTypeIsArray ? [] : {};\n        const newKeyToUse = resTypeIsArray ? resExactUsedKey : resUsedKey;\n        for (const m in res) {\n          if (Object.prototype.hasOwnProperty.call(res, m)) {\n            const deepKey = `${newKeyToUse}${keySeparator}${m}`;\n            copy[m] = this.translate(deepKey, {\n              ...options,\n              ...{\n                joinArrays: false,\n                ns: namespaces\n              }\n            });\n            if (copy[m] === deepKey) copy[m] = res[m];\n          }\n        }\n        res = copy;\n      }\n    } else if (handleAsObjectInI18nFormat && typeof joinArrays === 'string' && resType === '[object Array]') {\n      res = res.join(joinArrays);\n      if (res) res = this.extendTranslation(res, keys, options, lastKey);\n    } else {\n      let usedDefault = false;\n      let usedKey = false;\n      const needsPluralHandling = options.count !== undefined && typeof options.count !== 'string';\n      const hasDefaultValue = Translator.hasDefaultValue(options);\n      const defaultValueSuffix = needsPluralHandling ? this.pluralResolver.getSuffix(lng, options.count, options) : '';\n      const defaultValueSuffixOrdinalFallback = options.ordinal && needsPluralHandling ? this.pluralResolver.getSuffix(lng, options.count, {\n        ordinal: false\n      }) : '';\n      const needsZeroSuffixLookup = needsPluralHandling && !options.ordinal && options.count === 0 && this.pluralResolver.shouldUseIntlApi();\n      const defaultValue = needsZeroSuffixLookup && options[`defaultValue${this.options.pluralSeparator}zero`] || options[`defaultValue${defaultValueSuffix}`] || options[`defaultValue${defaultValueSuffixOrdinalFallback}`] || options.defaultValue;\n      if (!this.isValidLookup(res) && hasDefaultValue) {\n        usedDefault = true;\n        res = defaultValue;\n      }\n      if (!this.isValidLookup(res)) {\n        usedKey = true;\n        res = key;\n      }\n      const missingKeyNoValueFallbackToKey = options.missingKeyNoValueFallbackToKey || this.options.missingKeyNoValueFallbackToKey;\n      const resForMissing = missingKeyNoValueFallbackToKey && usedKey ? undefined : res;\n      const updateMissing = hasDefaultValue && defaultValue !== res && this.options.updateMissing;\n      if (usedKey || usedDefault || updateMissing) {\n        this.logger.log(updateMissing ? 'updateKey' : 'missingKey', lng, namespace, key, updateMissing ? defaultValue : res);\n        if (keySeparator) {\n          const fk = this.resolve(key, {\n            ...options,\n            keySeparator: false\n          });\n          if (fk && fk.res) this.logger.warn('Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.');\n        }\n        let lngs = [];\n        const fallbackLngs = this.languageUtils.getFallbackCodes(this.options.fallbackLng, options.lng || this.language);\n        if (this.options.saveMissingTo === 'fallback' && fallbackLngs && fallbackLngs[0]) {\n          for (let i = 0; i < fallbackLngs.length; i++) {\n            lngs.push(fallbackLngs[i]);\n          }\n        } else if (this.options.saveMissingTo === 'all') {\n          lngs = this.languageUtils.toResolveHierarchy(options.lng || this.language);\n        } else {\n          lngs.push(options.lng || this.language);\n        }\n        const send = (l, k, specificDefaultValue) => {\n          const defaultForMissing = hasDefaultValue && specificDefaultValue !== res ? specificDefaultValue : resForMissing;\n          if (this.options.missingKeyHandler) {\n            this.options.missingKeyHandler(l, namespace, k, defaultForMissing, updateMissing, options);\n          } else if (this.backendConnector && this.backendConnector.saveMissing) {\n            this.backendConnector.saveMissing(l, namespace, k, defaultForMissing, updateMissing, options);\n          }\n          this.emit('missingKey', l, namespace, k, res);\n        };\n        if (this.options.saveMissing) {\n          if (this.options.saveMissingPlurals && needsPluralHandling) {\n            lngs.forEach(language => {\n              const suffixes = this.pluralResolver.getSuffixes(language, options);\n              if (needsZeroSuffixLookup && options[`defaultValue${this.options.pluralSeparator}zero`] && suffixes.indexOf(`${this.options.pluralSeparator}zero`) < 0) {\n                suffixes.push(`${this.options.pluralSeparator}zero`);\n              }\n              suffixes.forEach(suffix => {\n                send([language], key + suffix, options[`defaultValue${suffix}`] || defaultValue);\n              });\n            });\n          } else {\n            send(lngs, key, defaultValue);\n          }\n        }\n      }\n      res = this.extendTranslation(res, keys, options, resolved, lastKey);\n      if (usedKey && res === key && this.options.appendNamespaceToMissingKey) res = `${namespace}:${key}`;\n      if ((usedKey || usedDefault) && this.options.parseMissingKeyHandler) {\n        if (this.options.compatibilityAPI !== 'v1') {\n          res = this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey ? `${namespace}:${key}` : key, usedDefault ? res : undefined);\n        } else {\n          res = this.options.parseMissingKeyHandler(res);\n        }\n      }\n    }\n    if (returnDetails) {\n      resolved.res = res;\n      resolved.usedParams = this.getUsedParamsDetails(options);\n      return resolved;\n    }\n    return res;\n  }\n  extendTranslation(res, key, options, resolved, lastKey) {\n    var _this = this;\n    if (this.i18nFormat && this.i18nFormat.parse) {\n      res = this.i18nFormat.parse(res, {\n        ...this.options.interpolation.defaultVariables,\n        ...options\n      }, options.lng || this.language || resolved.usedLng, resolved.usedNS, resolved.usedKey, {\n        resolved\n      });\n    } else if (!options.skipInterpolation) {\n      if (options.interpolation) this.interpolator.init({\n        ...options,\n        ...{\n          interpolation: {\n            ...this.options.interpolation,\n            ...options.interpolation\n          }\n        }\n      });\n      const skipOnVariables = typeof res === 'string' && (options && options.interpolation && options.interpolation.skipOnVariables !== undefined ? options.interpolation.skipOnVariables : this.options.interpolation.skipOnVariables);\n      let nestBef;\n      if (skipOnVariables) {\n        const nb = res.match(this.interpolator.nestingRegexp);\n        nestBef = nb && nb.length;\n      }\n      let data = options.replace && typeof options.replace !== 'string' ? options.replace : options;\n      if (this.options.interpolation.defaultVariables) data = {\n        ...this.options.interpolation.defaultVariables,\n        ...data\n      };\n      res = this.interpolator.interpolate(res, data, options.lng || this.language, options);\n      if (skipOnVariables) {\n        const na = res.match(this.interpolator.nestingRegexp);\n        const nestAft = na && na.length;\n        if (nestBef < nestAft) options.nest = false;\n      }\n      if (!options.lng && this.options.compatibilityAPI !== 'v1' && resolved && resolved.res) options.lng = resolved.usedLng;\n      if (options.nest !== false) res = this.interpolator.nest(res, function () {\n        for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n          args[_key] = arguments[_key];\n        }\n        if (lastKey && lastKey[0] === args[0] && !options.context) {\n          _this.logger.warn(`It seems you are nesting recursively key: ${args[0]} in key: ${key[0]}`);\n          return null;\n        }\n        return _this.translate(...args, key);\n      }, options);\n      if (options.interpolation) this.interpolator.reset();\n    }\n    const postProcess = options.postProcess || this.options.postProcess;\n    const postProcessorNames = typeof postProcess === 'string' ? [postProcess] : postProcess;\n    if (res !== undefined && res !== null && postProcessorNames && postProcessorNames.length && options.applyPostProcessor !== false) {\n      res = postProcessor.handle(postProcessorNames, res, key, this.options && this.options.postProcessPassResolved ? {\n        i18nResolved: {\n          ...resolved,\n          usedParams: this.getUsedParamsDetails(options)\n        },\n        ...options\n      } : options, this);\n    }\n    return res;\n  }\n  resolve(keys) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    let found;\n    let usedKey;\n    let exactUsedKey;\n    let usedLng;\n    let usedNS;\n    if (typeof keys === 'string') keys = [keys];\n    keys.forEach(k => {\n      if (this.isValidLookup(found)) return;\n      const extracted = this.extractFromKey(k, options);\n      const key = extracted.key;\n      usedKey = key;\n      let namespaces = extracted.namespaces;\n      if (this.options.fallbackNS) namespaces = namespaces.concat(this.options.fallbackNS);\n      const needsPluralHandling = options.count !== undefined && typeof options.count !== 'string';\n      const needsZeroSuffixLookup = needsPluralHandling && !options.ordinal && options.count === 0 && this.pluralResolver.shouldUseIntlApi();\n      const needsContextHandling = options.context !== undefined && (typeof options.context === 'string' || typeof options.context === 'number') && options.context !== '';\n      const codes = options.lngs ? options.lngs : this.languageUtils.toResolveHierarchy(options.lng || this.language, options.fallbackLng);\n      namespaces.forEach(ns => {\n        if (this.isValidLookup(found)) return;\n        usedNS = ns;\n        if (!checkedLoadedFor[`${codes[0]}-${ns}`] && this.utils && this.utils.hasLoadedNamespace && !this.utils.hasLoadedNamespace(usedNS)) {\n          checkedLoadedFor[`${codes[0]}-${ns}`] = true;\n          this.logger.warn(`key \"${usedKey}\" for languages \"${codes.join(', ')}\" won't get resolved as namespace \"${usedNS}\" was not yet loaded`, 'This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!');\n        }\n        codes.forEach(code => {\n          if (this.isValidLookup(found)) return;\n          usedLng = code;\n          const finalKeys = [key];\n          if (this.i18nFormat && this.i18nFormat.addLookupKeys) {\n            this.i18nFormat.addLookupKeys(finalKeys, key, code, ns, options);\n          } else {\n            let pluralSuffix;\n            if (needsPluralHandling) pluralSuffix = this.pluralResolver.getSuffix(code, options.count, options);\n            const zeroSuffix = `${this.options.pluralSeparator}zero`;\n            const ordinalPrefix = `${this.options.pluralSeparator}ordinal${this.options.pluralSeparator}`;\n            if (needsPluralHandling) {\n              finalKeys.push(key + pluralSuffix);\n              if (options.ordinal && pluralSuffix.indexOf(ordinalPrefix) === 0) {\n                finalKeys.push(key + pluralSuffix.replace(ordinalPrefix, this.options.pluralSeparator));\n              }\n              if (needsZeroSuffixLookup) {\n                finalKeys.push(key + zeroSuffix);\n              }\n            }\n            if (needsContextHandling) {\n              const contextKey = `${key}${this.options.contextSeparator}${options.context}`;\n              finalKeys.push(contextKey);\n              if (needsPluralHandling) {\n                finalKeys.push(contextKey + pluralSuffix);\n                if (options.ordinal && pluralSuffix.indexOf(ordinalPrefix) === 0) {\n                  finalKeys.push(contextKey + pluralSuffix.replace(ordinalPrefix, this.options.pluralSeparator));\n                }\n                if (needsZeroSuffixLookup) {\n                  finalKeys.push(contextKey + zeroSuffix);\n                }\n              }\n            }\n          }\n          let possibleKey;\n          while (possibleKey = finalKeys.pop()) {\n            if (!this.isValidLookup(found)) {\n              exactUsedKey = possibleKey;\n              found = this.getResource(code, ns, possibleKey, options);\n            }\n          }\n        });\n      });\n    });\n    return {\n      res: found,\n      usedKey,\n      exactUsedKey,\n      usedLng,\n      usedNS\n    };\n  }\n  isValidLookup(res) {\n    return res !== undefined && !(!this.options.returnNull && res === null) && !(!this.options.returnEmptyString && res === '');\n  }\n  getResource(code, ns, key) {\n    let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n    if (this.i18nFormat && this.i18nFormat.getResource) return this.i18nFormat.getResource(code, ns, key, options);\n    return this.resourceStore.getResource(code, ns, key, options);\n  }\n  getUsedParamsDetails() {\n    let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    const optionsKeys = ['defaultValue', 'ordinal', 'context', 'replace', 'lng', 'lngs', 'fallbackLng', 'ns', 'keySeparator', 'nsSeparator', 'returnObjects', 'returnDetails', 'joinArrays', 'postProcess', 'interpolation'];\n    const useOptionsReplaceForData = options.replace && typeof options.replace !== 'string';\n    let data = useOptionsReplaceForData ? options.replace : options;\n    if (useOptionsReplaceForData && typeof options.count !== 'undefined') {\n      data.count = options.count;\n    }\n    if (this.options.interpolation.defaultVariables) {\n      data = {\n        ...this.options.interpolation.defaultVariables,\n        ...data\n      };\n    }\n    if (!useOptionsReplaceForData) {\n      data = {\n        ...data\n      };\n      for (const key of optionsKeys) {\n        delete data[key];\n      }\n    }\n    return data;\n  }\n  static hasDefaultValue(options) {\n    const prefix = 'defaultValue';\n    for (const option in options) {\n      if (Object.prototype.hasOwnProperty.call(options, option) && prefix === option.substring(0, prefix.length) && undefined !== options[option]) {\n        return true;\n      }\n    }\n    return false;\n  }\n}\n\nfunction capitalize(string) {\n  return string.charAt(0).toUpperCase() + string.slice(1);\n}\nclass LanguageUtil {\n  constructor(options) {\n    this.options = options;\n    this.supportedLngs = this.options.supportedLngs || false;\n    this.logger = baseLogger.create('languageUtils');\n  }\n  getScriptPartFromCode(code) {\n    code = getCleanedCode(code);\n    if (!code || code.indexOf('-') < 0) return null;\n    const p = code.split('-');\n    if (p.length === 2) return null;\n    p.pop();\n    if (p[p.length - 1].toLowerCase() === 'x') return null;\n    return this.formatLanguageCode(p.join('-'));\n  }\n  getLanguagePartFromCode(code) {\n    code = getCleanedCode(code);\n    if (!code || code.indexOf('-') < 0) return code;\n    const p = code.split('-');\n    return this.formatLanguageCode(p[0]);\n  }\n  formatLanguageCode(code) {\n    if (typeof code === 'string' && code.indexOf('-') > -1) {\n      const specialCases = ['hans', 'hant', 'latn', 'cyrl', 'cans', 'mong', 'arab'];\n      let p = code.split('-');\n      if (this.options.lowerCaseLng) {\n        p = p.map(part => part.toLowerCase());\n      } else if (p.length === 2) {\n        p[0] = p[0].toLowerCase();\n        p[1] = p[1].toUpperCase();\n        if (specialCases.indexOf(p[1].toLowerCase()) > -1) p[1] = capitalize(p[1].toLowerCase());\n      } else if (p.length === 3) {\n        p[0] = p[0].toLowerCase();\n        if (p[1].length === 2) p[1] = p[1].toUpperCase();\n        if (p[0] !== 'sgn' && p[2].length === 2) p[2] = p[2].toUpperCase();\n        if (specialCases.indexOf(p[1].toLowerCase()) > -1) p[1] = capitalize(p[1].toLowerCase());\n        if (specialCases.indexOf(p[2].toLowerCase()) > -1) p[2] = capitalize(p[2].toLowerCase());\n      }\n      return p.join('-');\n    }\n    return this.options.cleanCode || this.options.lowerCaseLng ? code.toLowerCase() : code;\n  }\n  isSupportedCode(code) {\n    if (this.options.load === 'languageOnly' || this.options.nonExplicitSupportedLngs) {\n      code = this.getLanguagePartFromCode(code);\n    }\n    return !this.supportedLngs || !this.supportedLngs.length || this.supportedLngs.indexOf(code) > -1;\n  }\n  getBestMatchFromCodes(codes) {\n    if (!codes) return null;\n    let found;\n    codes.forEach(code => {\n      if (found) return;\n      const cleanedLng = this.formatLanguageCode(code);\n      if (!this.options.supportedLngs || this.isSupportedCode(cleanedLng)) found = cleanedLng;\n    });\n    if (!found && this.options.supportedLngs) {\n      codes.forEach(code => {\n        if (found) return;\n        const lngOnly = this.getLanguagePartFromCode(code);\n        if (this.isSupportedCode(lngOnly)) return found = lngOnly;\n        found = this.options.supportedLngs.find(supportedLng => {\n          if (supportedLng === lngOnly) return supportedLng;\n          if (supportedLng.indexOf('-') < 0 && lngOnly.indexOf('-') < 0) return;\n          if (supportedLng.indexOf(lngOnly) === 0) return supportedLng;\n        });\n      });\n    }\n    if (!found) found = this.getFallbackCodes(this.options.fallbackLng)[0];\n    return found;\n  }\n  getFallbackCodes(fallbacks, code) {\n    if (!fallbacks) return [];\n    if (typeof fallbacks === 'function') fallbacks = fallbacks(code);\n    if (typeof fallbacks === 'string') fallbacks = [fallbacks];\n    if (Object.prototype.toString.apply(fallbacks) === '[object Array]') return fallbacks;\n    if (!code) return fallbacks.default || [];\n    let found = fallbacks[code];\n    if (!found) found = fallbacks[this.getScriptPartFromCode(code)];\n    if (!found) found = fallbacks[this.formatLanguageCode(code)];\n    if (!found) found = fallbacks[this.getLanguagePartFromCode(code)];\n    if (!found) found = fallbacks.default;\n    return found || [];\n  }\n  toResolveHierarchy(code, fallbackCode) {\n    const fallbackCodes = this.getFallbackCodes(fallbackCode || this.options.fallbackLng || [], code);\n    const codes = [];\n    const addCode = c => {\n      if (!c) return;\n      if (this.isSupportedCode(c)) {\n        codes.push(c);\n      } else {\n        this.logger.warn(`rejecting language code not found in supportedLngs: ${c}`);\n      }\n    };\n    if (typeof code === 'string' && (code.indexOf('-') > -1 || code.indexOf('_') > -1)) {\n      if (this.options.load !== 'languageOnly') addCode(this.formatLanguageCode(code));\n      if (this.options.load !== 'languageOnly' && this.options.load !== 'currentOnly') addCode(this.getScriptPartFromCode(code));\n      if (this.options.load !== 'currentOnly') addCode(this.getLanguagePartFromCode(code));\n    } else if (typeof code === 'string') {\n      addCode(this.formatLanguageCode(code));\n    }\n    fallbackCodes.forEach(fc => {\n      if (codes.indexOf(fc) < 0) addCode(this.formatLanguageCode(fc));\n    });\n    return codes;\n  }\n}\n\nlet sets = [{\n  lngs: ['ach', 'ak', 'am', 'arn', 'br', 'fil', 'gun', 'ln', 'mfe', 'mg', 'mi', 'oc', 'pt', 'pt-BR', 'tg', 'tl', 'ti', 'tr', 'uz', 'wa'],\n  nr: [1, 2],\n  fc: 1\n}, {\n  lngs: ['af', 'an', 'ast', 'az', 'bg', 'bn', 'ca', 'da', 'de', 'dev', 'el', 'en', 'eo', 'es', 'et', 'eu', 'fi', 'fo', 'fur', 'fy', 'gl', 'gu', 'ha', 'hi', 'hu', 'hy', 'ia', 'it', 'kk', 'kn', 'ku', 'lb', 'mai', 'ml', 'mn', 'mr', 'nah', 'nap', 'nb', 'ne', 'nl', 'nn', 'no', 'nso', 'pa', 'pap', 'pms', 'ps', 'pt-PT', 'rm', 'sco', 'se', 'si', 'so', 'son', 'sq', 'sv', 'sw', 'ta', 'te', 'tk', 'ur', 'yo'],\n  nr: [1, 2],\n  fc: 2\n}, {\n  lngs: ['ay', 'bo', 'cgg', 'fa', 'ht', 'id', 'ja', 'jbo', 'ka', 'km', 'ko', 'ky', 'lo', 'ms', 'sah', 'su', 'th', 'tt', 'ug', 'vi', 'wo', 'zh'],\n  nr: [1],\n  fc: 3\n}, {\n  lngs: ['be', 'bs', 'cnr', 'dz', 'hr', 'ru', 'sr', 'uk'],\n  nr: [1, 2, 5],\n  fc: 4\n}, {\n  lngs: ['ar'],\n  nr: [0, 1, 2, 3, 11, 100],\n  fc: 5\n}, {\n  lngs: ['cs', 'sk'],\n  nr: [1, 2, 5],\n  fc: 6\n}, {\n  lngs: ['csb', 'pl'],\n  nr: [1, 2, 5],\n  fc: 7\n}, {\n  lngs: ['cy'],\n  nr: [1, 2, 3, 8],\n  fc: 8\n}, {\n  lngs: ['fr'],\n  nr: [1, 2],\n  fc: 9\n}, {\n  lngs: ['ga'],\n  nr: [1, 2, 3, 7, 11],\n  fc: 10\n}, {\n  lngs: ['gd'],\n  nr: [1, 2, 3, 20],\n  fc: 11\n}, {\n  lngs: ['is'],\n  nr: [1, 2],\n  fc: 12\n}, {\n  lngs: ['jv'],\n  nr: [0, 1],\n  fc: 13\n}, {\n  lngs: ['kw'],\n  nr: [1, 2, 3, 4],\n  fc: 14\n}, {\n  lngs: ['lt'],\n  nr: [1, 2, 10],\n  fc: 15\n}, {\n  lngs: ['lv'],\n  nr: [1, 2, 0],\n  fc: 16\n}, {\n  lngs: ['mk'],\n  nr: [1, 2],\n  fc: 17\n}, {\n  lngs: ['mnk'],\n  nr: [0, 1, 2],\n  fc: 18\n}, {\n  lngs: ['mt'],\n  nr: [1, 2, 11, 20],\n  fc: 19\n}, {\n  lngs: ['or'],\n  nr: [2, 1],\n  fc: 2\n}, {\n  lngs: ['ro'],\n  nr: [1, 2, 20],\n  fc: 20\n}, {\n  lngs: ['sl'],\n  nr: [5, 1, 2, 3],\n  fc: 21\n}, {\n  lngs: ['he', 'iw'],\n  nr: [1, 2, 20, 21],\n  fc: 22\n}];\nlet _rulesPluralsTypes = {\n  1: function (n) {\n    return Number(n > 1);\n  },\n  2: function (n) {\n    return Number(n != 1);\n  },\n  3: function (n) {\n    return 0;\n  },\n  4: function (n) {\n    return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n  },\n  5: function (n) {\n    return Number(n == 0 ? 0 : n == 1 ? 1 : n == 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5);\n  },\n  6: function (n) {\n    return Number(n == 1 ? 0 : n >= 2 && n <= 4 ? 1 : 2);\n  },\n  7: function (n) {\n    return Number(n == 1 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n  },\n  8: function (n) {\n    return Number(n == 1 ? 0 : n == 2 ? 1 : n != 8 && n != 11 ? 2 : 3);\n  },\n  9: function (n) {\n    return Number(n >= 2);\n  },\n  10: function (n) {\n    return Number(n == 1 ? 0 : n == 2 ? 1 : n < 7 ? 2 : n < 11 ? 3 : 4);\n  },\n  11: function (n) {\n    return Number(n == 1 || n == 11 ? 0 : n == 2 || n == 12 ? 1 : n > 2 && n < 20 ? 2 : 3);\n  },\n  12: function (n) {\n    return Number(n % 10 != 1 || n % 100 == 11);\n  },\n  13: function (n) {\n    return Number(n !== 0);\n  },\n  14: function (n) {\n    return Number(n == 1 ? 0 : n == 2 ? 1 : n == 3 ? 2 : 3);\n  },\n  15: function (n) {\n    return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n  },\n  16: function (n) {\n    return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n !== 0 ? 1 : 2);\n  },\n  17: function (n) {\n    return Number(n == 1 || n % 10 == 1 && n % 100 != 11 ? 0 : 1);\n  },\n  18: function (n) {\n    return Number(n == 0 ? 0 : n == 1 ? 1 : 2);\n  },\n  19: function (n) {\n    return Number(n == 1 ? 0 : n == 0 || n % 100 > 1 && n % 100 < 11 ? 1 : n % 100 > 10 && n % 100 < 20 ? 2 : 3);\n  },\n  20: function (n) {\n    return Number(n == 1 ? 0 : n == 0 || n % 100 > 0 && n % 100 < 20 ? 1 : 2);\n  },\n  21: function (n) {\n    return Number(n % 100 == 1 ? 1 : n % 100 == 2 ? 2 : n % 100 == 3 || n % 100 == 4 ? 3 : 0);\n  },\n  22: function (n) {\n    return Number(n == 1 ? 0 : n == 2 ? 1 : (n < 0 || n > 10) && n % 10 == 0 ? 2 : 3);\n  }\n};\nconst nonIntlVersions = ['v1', 'v2', 'v3'];\nconst intlVersions = ['v4'];\nconst suffixesOrder = {\n  zero: 0,\n  one: 1,\n  two: 2,\n  few: 3,\n  many: 4,\n  other: 5\n};\nfunction createRules() {\n  const rules = {};\n  sets.forEach(set => {\n    set.lngs.forEach(l => {\n      rules[l] = {\n        numbers: set.nr,\n        plurals: _rulesPluralsTypes[set.fc]\n      };\n    });\n  });\n  return rules;\n}\nclass PluralResolver {\n  constructor(languageUtils) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    this.languageUtils = languageUtils;\n    this.options = options;\n    this.logger = baseLogger.create('pluralResolver');\n    if ((!this.options.compatibilityJSON || intlVersions.includes(this.options.compatibilityJSON)) && (typeof Intl === 'undefined' || !Intl.PluralRules)) {\n      this.options.compatibilityJSON = 'v3';\n      this.logger.error('Your environment seems not to be Intl API compatible, use an Intl.PluralRules polyfill. Will fallback to the compatibilityJSON v3 format handling.');\n    }\n    this.rules = createRules();\n  }\n  addRule(lng, obj) {\n    this.rules[lng] = obj;\n  }\n  getRule(code) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    if (this.shouldUseIntlApi()) {\n      try {\n        return new Intl.PluralRules(getCleanedCode(code === 'dev' ? 'en' : code), {\n          type: options.ordinal ? 'ordinal' : 'cardinal'\n        });\n      } catch (err) {\n        return;\n      }\n    }\n    return this.rules[code] || this.rules[this.languageUtils.getLanguagePartFromCode(code)];\n  }\n  needsPlural(code) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    const rule = this.getRule(code, options);\n    if (this.shouldUseIntlApi()) {\n      return rule && rule.resolvedOptions().pluralCategories.length > 1;\n    }\n    return rule && rule.numbers.length > 1;\n  }\n  getPluralFormsOfKey(code, key) {\n    let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    return this.getSuffixes(code, options).map(suffix => `${key}${suffix}`);\n  }\n  getSuffixes(code) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    const rule = this.getRule(code, options);\n    if (!rule) {\n      return [];\n    }\n    if (this.shouldUseIntlApi()) {\n      return rule.resolvedOptions().pluralCategories.sort((pluralCategory1, pluralCategory2) => suffixesOrder[pluralCategory1] - suffixesOrder[pluralCategory2]).map(pluralCategory => `${this.options.prepend}${options.ordinal ? `ordinal${this.options.prepend}` : ''}${pluralCategory}`);\n    }\n    return rule.numbers.map(number => this.getSuffix(code, number, options));\n  }\n  getSuffix(code, count) {\n    let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    const rule = this.getRule(code, options);\n    if (rule) {\n      if (this.shouldUseIntlApi()) {\n        return `${this.options.prepend}${options.ordinal ? `ordinal${this.options.prepend}` : ''}${rule.select(count)}`;\n      }\n      return this.getSuffixRetroCompatible(rule, count);\n    }\n    this.logger.warn(`no plural rule found for: ${code}`);\n    return '';\n  }\n  getSuffixRetroCompatible(rule, count) {\n    const idx = rule.noAbs ? rule.plurals(count) : rule.plurals(Math.abs(count));\n    let suffix = rule.numbers[idx];\n    if (this.options.simplifyPluralSuffix && rule.numbers.length === 2 && rule.numbers[0] === 1) {\n      if (suffix === 2) {\n        suffix = 'plural';\n      } else if (suffix === 1) {\n        suffix = '';\n      }\n    }\n    const returnSuffix = () => this.options.prepend && suffix.toString() ? this.options.prepend + suffix.toString() : suffix.toString();\n    if (this.options.compatibilityJSON === 'v1') {\n      if (suffix === 1) return '';\n      if (typeof suffix === 'number') return `_plural_${suffix.toString()}`;\n      return returnSuffix();\n    } else if (this.options.compatibilityJSON === 'v2') {\n      return returnSuffix();\n    } else if (this.options.simplifyPluralSuffix && rule.numbers.length === 2 && rule.numbers[0] === 1) {\n      return returnSuffix();\n    }\n    return this.options.prepend && idx.toString() ? this.options.prepend + idx.toString() : idx.toString();\n  }\n  shouldUseIntlApi() {\n    return !nonIntlVersions.includes(this.options.compatibilityJSON);\n  }\n}\n\nfunction deepFindWithDefaults(data, defaultData, key) {\n  let keySeparator = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '.';\n  let ignoreJSONStructure = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n  let path = getPathWithDefaults(data, defaultData, key);\n  if (!path && ignoreJSONStructure && typeof key === 'string') {\n    path = deepFind(data, key, keySeparator);\n    if (path === undefined) path = deepFind(defaultData, key, keySeparator);\n  }\n  return path;\n}\nclass Interpolator {\n  constructor() {\n    let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    this.logger = baseLogger.create('interpolator');\n    this.options = options;\n    this.format = options.interpolation && options.interpolation.format || (value => value);\n    this.init(options);\n  }\n  init() {\n    let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    if (!options.interpolation) options.interpolation = {\n      escapeValue: true\n    };\n    const iOpts = options.interpolation;\n    this.escape = iOpts.escape !== undefined ? iOpts.escape : escape;\n    this.escapeValue = iOpts.escapeValue !== undefined ? iOpts.escapeValue : true;\n    this.useRawValueToEscape = iOpts.useRawValueToEscape !== undefined ? iOpts.useRawValueToEscape : false;\n    this.prefix = iOpts.prefix ? regexEscape(iOpts.prefix) : iOpts.prefixEscaped || '{{';\n    this.suffix = iOpts.suffix ? regexEscape(iOpts.suffix) : iOpts.suffixEscaped || '}}';\n    this.formatSeparator = iOpts.formatSeparator ? iOpts.formatSeparator : iOpts.formatSeparator || ',';\n    this.unescapePrefix = iOpts.unescapeSuffix ? '' : iOpts.unescapePrefix || '-';\n    this.unescapeSuffix = this.unescapePrefix ? '' : iOpts.unescapeSuffix || '';\n    this.nestingPrefix = iOpts.nestingPrefix ? regexEscape(iOpts.nestingPrefix) : iOpts.nestingPrefixEscaped || regexEscape('$t(');\n    this.nestingSuffix = iOpts.nestingSuffix ? regexEscape(iOpts.nestingSuffix) : iOpts.nestingSuffixEscaped || regexEscape(')');\n    this.nestingOptionsSeparator = iOpts.nestingOptionsSeparator ? iOpts.nestingOptionsSeparator : iOpts.nestingOptionsSeparator || ',';\n    this.maxReplaces = iOpts.maxReplaces ? iOpts.maxReplaces : 1000;\n    this.alwaysFormat = iOpts.alwaysFormat !== undefined ? iOpts.alwaysFormat : false;\n    this.resetRegExp();\n  }\n  reset() {\n    if (this.options) this.init(this.options);\n  }\n  resetRegExp() {\n    const getOrResetRegExp = (existingRegExp, pattern) => {\n      if (existingRegExp && existingRegExp.source === pattern) {\n        existingRegExp.lastIndex = 0;\n        return existingRegExp;\n      }\n      return new RegExp(pattern, 'g');\n    };\n    this.regexp = getOrResetRegExp(this.regexp, `${this.prefix}(.+?)${this.suffix}`);\n    this.regexpUnescape = getOrResetRegExp(this.regexpUnescape, `${this.prefix}${this.unescapePrefix}(.+?)${this.unescapeSuffix}${this.suffix}`);\n    this.nestingRegexp = getOrResetRegExp(this.nestingRegexp, `${this.nestingPrefix}(.+?)${this.nestingSuffix}`);\n  }\n  interpolate(str, data, lng, options) {\n    let match;\n    let value;\n    let replaces;\n    const defaultData = this.options && this.options.interpolation && this.options.interpolation.defaultVariables || {};\n    function regexSafe(val) {\n      return val.replace(/\\$/g, '$$$$');\n    }\n    const handleFormat = key => {\n      if (key.indexOf(this.formatSeparator) < 0) {\n        const path = deepFindWithDefaults(data, defaultData, key, this.options.keySeparator, this.options.ignoreJSONStructure);\n        return this.alwaysFormat ? this.format(path, undefined, lng, {\n          ...options,\n          ...data,\n          interpolationkey: key\n        }) : path;\n      }\n      const p = key.split(this.formatSeparator);\n      const k = p.shift().trim();\n      const f = p.join(this.formatSeparator).trim();\n      return this.format(deepFindWithDefaults(data, defaultData, k, this.options.keySeparator, this.options.ignoreJSONStructure), f, lng, {\n        ...options,\n        ...data,\n        interpolationkey: k\n      });\n    };\n    this.resetRegExp();\n    const missingInterpolationHandler = options && options.missingInterpolationHandler || this.options.missingInterpolationHandler;\n    const skipOnVariables = options && options.interpolation && options.interpolation.skipOnVariables !== undefined ? options.interpolation.skipOnVariables : this.options.interpolation.skipOnVariables;\n    const todos = [{\n      regex: this.regexpUnescape,\n      safeValue: val => regexSafe(val)\n    }, {\n      regex: this.regexp,\n      safeValue: val => this.escapeValue ? regexSafe(this.escape(val)) : regexSafe(val)\n    }];\n    todos.forEach(todo => {\n      replaces = 0;\n      while (match = todo.regex.exec(str)) {\n        const matchedVar = match[1].trim();\n        value = handleFormat(matchedVar);\n        if (value === undefined) {\n          if (typeof missingInterpolationHandler === 'function') {\n            const temp = missingInterpolationHandler(str, match, options);\n            value = typeof temp === 'string' ? temp : '';\n          } else if (options && Object.prototype.hasOwnProperty.call(options, matchedVar)) {\n            value = '';\n          } else if (skipOnVariables) {\n            value = match[0];\n            continue;\n          } else {\n            this.logger.warn(`missed to pass in variable ${matchedVar} for interpolating ${str}`);\n            value = '';\n          }\n        } else if (typeof value !== 'string' && !this.useRawValueToEscape) {\n          value = makeString(value);\n        }\n        const safeValue = todo.safeValue(value);\n        str = str.replace(match[0], safeValue);\n        if (skipOnVariables) {\n          todo.regex.lastIndex += value.length;\n          todo.regex.lastIndex -= match[0].length;\n        } else {\n          todo.regex.lastIndex = 0;\n        }\n        replaces++;\n        if (replaces >= this.maxReplaces) {\n          break;\n        }\n      }\n    });\n    return str;\n  }\n  nest(str, fc) {\n    let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    let match;\n    let value;\n    let clonedOptions;\n    function handleHasOptions(key, inheritedOptions) {\n      const sep = this.nestingOptionsSeparator;\n      if (key.indexOf(sep) < 0) return key;\n      const c = key.split(new RegExp(`${sep}[ ]*{`));\n      let optionsString = `{${c[1]}`;\n      key = c[0];\n      optionsString = this.interpolate(optionsString, clonedOptions);\n      const matchedSingleQuotes = optionsString.match(/'/g);\n      const matchedDoubleQuotes = optionsString.match(/\"/g);\n      if (matchedSingleQuotes && matchedSingleQuotes.length % 2 === 0 && !matchedDoubleQuotes || matchedDoubleQuotes.length % 2 !== 0) {\n        optionsString = optionsString.replace(/'/g, '\"');\n      }\n      try {\n        clonedOptions = JSON.parse(optionsString);\n        if (inheritedOptions) clonedOptions = {\n          ...inheritedOptions,\n          ...clonedOptions\n        };\n      } catch (e) {\n        this.logger.warn(`failed parsing options string in nesting for key ${key}`, e);\n        return `${key}${sep}${optionsString}`;\n      }\n      delete clonedOptions.defaultValue;\n      return key;\n    }\n    while (match = this.nestingRegexp.exec(str)) {\n      let formatters = [];\n      clonedOptions = {\n        ...options\n      };\n      clonedOptions = clonedOptions.replace && typeof clonedOptions.replace !== 'string' ? clonedOptions.replace : clonedOptions;\n      clonedOptions.applyPostProcessor = false;\n      delete clonedOptions.defaultValue;\n      let doReduce = false;\n      if (match[0].indexOf(this.formatSeparator) !== -1 && !/{.*}/.test(match[1])) {\n        const r = match[1].split(this.formatSeparator).map(elem => elem.trim());\n        match[1] = r.shift();\n        formatters = r;\n        doReduce = true;\n      }\n      value = fc(handleHasOptions.call(this, match[1].trim(), clonedOptions), clonedOptions);\n      if (value && match[0] === str && typeof value !== 'string') return value;\n      if (typeof value !== 'string') value = makeString(value);\n      if (!value) {\n        this.logger.warn(`missed to resolve ${match[1]} for nesting ${str}`);\n        value = '';\n      }\n      if (doReduce) {\n        value = formatters.reduce((v, f) => this.format(v, f, options.lng, {\n          ...options,\n          interpolationkey: match[1].trim()\n        }), value.trim());\n      }\n      str = str.replace(match[0], value);\n      this.regexp.lastIndex = 0;\n    }\n    return str;\n  }\n}\n\nfunction parseFormatStr(formatStr) {\n  let formatName = formatStr.toLowerCase().trim();\n  const formatOptions = {};\n  if (formatStr.indexOf('(') > -1) {\n    const p = formatStr.split('(');\n    formatName = p[0].toLowerCase().trim();\n    const optStr = p[1].substring(0, p[1].length - 1);\n    if (formatName === 'currency' && optStr.indexOf(':') < 0) {\n      if (!formatOptions.currency) formatOptions.currency = optStr.trim();\n    } else if (formatName === 'relativetime' && optStr.indexOf(':') < 0) {\n      if (!formatOptions.range) formatOptions.range = optStr.trim();\n    } else {\n      const opts = optStr.split(';');\n      opts.forEach(opt => {\n        if (!opt) return;\n        const [key, ...rest] = opt.split(':');\n        const val = rest.join(':').trim().replace(/^'+|'+$/g, '');\n        if (!formatOptions[key.trim()]) formatOptions[key.trim()] = val;\n        if (val === 'false') formatOptions[key.trim()] = false;\n        if (val === 'true') formatOptions[key.trim()] = true;\n        if (!isNaN(val)) formatOptions[key.trim()] = parseInt(val, 10);\n      });\n    }\n  }\n  return {\n    formatName,\n    formatOptions\n  };\n}\nfunction createCachedFormatter(fn) {\n  const cache = {};\n  return function invokeFormatter(val, lng, options) {\n    const key = lng + JSON.stringify(options);\n    let formatter = cache[key];\n    if (!formatter) {\n      formatter = fn(getCleanedCode(lng), options);\n      cache[key] = formatter;\n    }\n    return formatter(val);\n  };\n}\nclass Formatter {\n  constructor() {\n    let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    this.logger = baseLogger.create('formatter');\n    this.options = options;\n    this.formats = {\n      number: createCachedFormatter((lng, opt) => {\n        const formatter = new Intl.NumberFormat(lng, {\n          ...opt\n        });\n        return val => formatter.format(val);\n      }),\n      currency: createCachedFormatter((lng, opt) => {\n        const formatter = new Intl.NumberFormat(lng, {\n          ...opt,\n          style: 'currency'\n        });\n        return val => formatter.format(val);\n      }),\n      datetime: createCachedFormatter((lng, opt) => {\n        const formatter = new Intl.DateTimeFormat(lng, {\n          ...opt\n        });\n        return val => formatter.format(val);\n      }),\n      relativetime: createCachedFormatter((lng, opt) => {\n        const formatter = new Intl.RelativeTimeFormat(lng, {\n          ...opt\n        });\n        return val => formatter.format(val, opt.range || 'day');\n      }),\n      list: createCachedFormatter((lng, opt) => {\n        const formatter = new Intl.ListFormat(lng, {\n          ...opt\n        });\n        return val => formatter.format(val);\n      })\n    };\n    this.init(options);\n  }\n  init(services) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n      interpolation: {}\n    };\n    const iOpts = options.interpolation;\n    this.formatSeparator = iOpts.formatSeparator ? iOpts.formatSeparator : iOpts.formatSeparator || ',';\n  }\n  add(name, fc) {\n    this.formats[name.toLowerCase().trim()] = fc;\n  }\n  addCached(name, fc) {\n    this.formats[name.toLowerCase().trim()] = createCachedFormatter(fc);\n  }\n  format(value, format, lng) {\n    let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n    const formats = format.split(this.formatSeparator);\n    const result = formats.reduce((mem, f) => {\n      const {\n        formatName,\n        formatOptions\n      } = parseFormatStr(f);\n      if (this.formats[formatName]) {\n        let formatted = mem;\n        try {\n          const valOptions = options && options.formatParams && options.formatParams[options.interpolationkey] || {};\n          const l = valOptions.locale || valOptions.lng || options.locale || options.lng || lng;\n          formatted = this.formats[formatName](mem, l, {\n            ...formatOptions,\n            ...options,\n            ...valOptions\n          });\n        } catch (error) {\n          this.logger.warn(error);\n        }\n        return formatted;\n      } else {\n        this.logger.warn(`there was no format function for ${formatName}`);\n      }\n      return mem;\n    }, value);\n    return result;\n  }\n}\n\nfunction removePending(q, name) {\n  if (q.pending[name] !== undefined) {\n    delete q.pending[name];\n    q.pendingCount--;\n  }\n}\nclass Connector extends EventEmitter {\n  constructor(backend, store, services) {\n    let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n    super();\n    this.backend = backend;\n    this.store = store;\n    this.services = services;\n    this.languageUtils = services.languageUtils;\n    this.options = options;\n    this.logger = baseLogger.create('backendConnector');\n    this.waitingReads = [];\n    this.maxParallelReads = options.maxParallelReads || 10;\n    this.readingCalls = 0;\n    this.maxRetries = options.maxRetries >= 0 ? options.maxRetries : 5;\n    this.retryTimeout = options.retryTimeout >= 1 ? options.retryTimeout : 350;\n    this.state = {};\n    this.queue = [];\n    if (this.backend && this.backend.init) {\n      this.backend.init(services, options.backend, options);\n    }\n  }\n  queueLoad(languages, namespaces, options, callback) {\n    const toLoad = {};\n    const pending = {};\n    const toLoadLanguages = {};\n    const toLoadNamespaces = {};\n    languages.forEach(lng => {\n      let hasAllNamespaces = true;\n      namespaces.forEach(ns => {\n        const name = `${lng}|${ns}`;\n        if (!options.reload && this.store.hasResourceBundle(lng, ns)) {\n          this.state[name] = 2;\n        } else if (this.state[name] < 0) ; else if (this.state[name] === 1) {\n          if (pending[name] === undefined) pending[name] = true;\n        } else {\n          this.state[name] = 1;\n          hasAllNamespaces = false;\n          if (pending[name] === undefined) pending[name] = true;\n          if (toLoad[name] === undefined) toLoad[name] = true;\n          if (toLoadNamespaces[ns] === undefined) toLoadNamespaces[ns] = true;\n        }\n      });\n      if (!hasAllNamespaces) toLoadLanguages[lng] = true;\n    });\n    if (Object.keys(toLoad).length || Object.keys(pending).length) {\n      this.queue.push({\n        pending,\n        pendingCount: Object.keys(pending).length,\n        loaded: {},\n        errors: [],\n        callback\n      });\n    }\n    return {\n      toLoad: Object.keys(toLoad),\n      pending: Object.keys(pending),\n      toLoadLanguages: Object.keys(toLoadLanguages),\n      toLoadNamespaces: Object.keys(toLoadNamespaces)\n    };\n  }\n  loaded(name, err, data) {\n    const s = name.split('|');\n    const lng = s[0];\n    const ns = s[1];\n    if (err) this.emit('failedLoading', lng, ns, err);\n    if (data) {\n      this.store.addResourceBundle(lng, ns, data);\n    }\n    this.state[name] = err ? -1 : 2;\n    const loaded = {};\n    this.queue.forEach(q => {\n      pushPath(q.loaded, [lng], ns);\n      removePending(q, name);\n      if (err) q.errors.push(err);\n      if (q.pendingCount === 0 && !q.done) {\n        Object.keys(q.loaded).forEach(l => {\n          if (!loaded[l]) loaded[l] = {};\n          const loadedKeys = q.loaded[l];\n          if (loadedKeys.length) {\n            loadedKeys.forEach(n => {\n              if (loaded[l][n] === undefined) loaded[l][n] = true;\n            });\n          }\n        });\n        q.done = true;\n        if (q.errors.length) {\n          q.callback(q.errors);\n        } else {\n          q.callback();\n        }\n      }\n    });\n    this.emit('loaded', loaded);\n    this.queue = this.queue.filter(q => !q.done);\n  }\n  read(lng, ns, fcName) {\n    let tried = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n    let wait = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : this.retryTimeout;\n    let callback = arguments.length > 5 ? arguments[5] : undefined;\n    if (!lng.length) return callback(null, {});\n    if (this.readingCalls >= this.maxParallelReads) {\n      this.waitingReads.push({\n        lng,\n        ns,\n        fcName,\n        tried,\n        wait,\n        callback\n      });\n      return;\n    }\n    this.readingCalls++;\n    const resolver = (err, data) => {\n      this.readingCalls--;\n      if (this.waitingReads.length > 0) {\n        const next = this.waitingReads.shift();\n        this.read(next.lng, next.ns, next.fcName, next.tried, next.wait, next.callback);\n      }\n      if (err && data && tried < this.maxRetries) {\n        setTimeout(() => {\n          this.read.call(this, lng, ns, fcName, tried + 1, wait * 2, callback);\n        }, wait);\n        return;\n      }\n      callback(err, data);\n    };\n    const fc = this.backend[fcName].bind(this.backend);\n    if (fc.length === 2) {\n      try {\n        const r = fc(lng, ns);\n        if (r && typeof r.then === 'function') {\n          r.then(data => resolver(null, data)).catch(resolver);\n        } else {\n          resolver(null, r);\n        }\n      } catch (err) {\n        resolver(err);\n      }\n      return;\n    }\n    return fc(lng, ns, resolver);\n  }\n  prepareLoading(languages, namespaces) {\n    let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    let callback = arguments.length > 3 ? arguments[3] : undefined;\n    if (!this.backend) {\n      this.logger.warn('No backend was added via i18next.use. Will not load resources.');\n      return callback && callback();\n    }\n    if (typeof languages === 'string') languages = this.languageUtils.toResolveHierarchy(languages);\n    if (typeof namespaces === 'string') namespaces = [namespaces];\n    const toLoad = this.queueLoad(languages, namespaces, options, callback);\n    if (!toLoad.toLoad.length) {\n      if (!toLoad.pending.length) callback();\n      return null;\n    }\n    toLoad.toLoad.forEach(name => {\n      this.loadOne(name);\n    });\n  }\n  load(languages, namespaces, callback) {\n    this.prepareLoading(languages, namespaces, {}, callback);\n  }\n  reload(languages, namespaces, callback) {\n    this.prepareLoading(languages, namespaces, {\n      reload: true\n    }, callback);\n  }\n  loadOne(name) {\n    let prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n    const s = name.split('|');\n    const lng = s[0];\n    const ns = s[1];\n    this.read(lng, ns, 'read', undefined, undefined, (err, data) => {\n      if (err) this.logger.warn(`${prefix}loading namespace ${ns} for language ${lng} failed`, err);\n      if (!err && data) this.logger.log(`${prefix}loaded namespace ${ns} for language ${lng}`, data);\n      this.loaded(name, err, data);\n    });\n  }\n  saveMissing(languages, namespace, key, fallbackValue, isUpdate) {\n    let options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n    let clb = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : () => {};\n    if (this.services.utils && this.services.utils.hasLoadedNamespace && !this.services.utils.hasLoadedNamespace(namespace)) {\n      this.logger.warn(`did not save key \"${key}\" as the namespace \"${namespace}\" was not yet loaded`, 'This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!');\n      return;\n    }\n    if (key === undefined || key === null || key === '') return;\n    if (this.backend && this.backend.create) {\n      const opts = {\n        ...options,\n        isUpdate\n      };\n      const fc = this.backend.create.bind(this.backend);\n      if (fc.length < 6) {\n        try {\n          let r;\n          if (fc.length === 5) {\n            r = fc(languages, namespace, key, fallbackValue, opts);\n          } else {\n            r = fc(languages, namespace, key, fallbackValue);\n          }\n          if (r && typeof r.then === 'function') {\n            r.then(data => clb(null, data)).catch(clb);\n          } else {\n            clb(null, r);\n          }\n        } catch (err) {\n          clb(err);\n        }\n      } else {\n        fc(languages, namespace, key, fallbackValue, clb, opts);\n      }\n    }\n    if (!languages || !languages[0]) return;\n    this.store.addResource(languages[0], namespace, key, fallbackValue);\n  }\n}\n\nfunction get() {\n  return {\n    debug: false,\n    initImmediate: true,\n    ns: ['translation'],\n    defaultNS: ['translation'],\n    fallbackLng: ['dev'],\n    fallbackNS: false,\n    supportedLngs: false,\n    nonExplicitSupportedLngs: false,\n    load: 'all',\n    preload: false,\n    simplifyPluralSuffix: true,\n    keySeparator: '.',\n    nsSeparator: ':',\n    pluralSeparator: '_',\n    contextSeparator: '_',\n    partialBundledLanguages: false,\n    saveMissing: false,\n    updateMissing: false,\n    saveMissingTo: 'fallback',\n    saveMissingPlurals: true,\n    missingKeyHandler: false,\n    missingInterpolationHandler: false,\n    postProcess: false,\n    postProcessPassResolved: false,\n    returnNull: false,\n    returnEmptyString: true,\n    returnObjects: false,\n    joinArrays: false,\n    returnedObjectHandler: false,\n    parseMissingKeyHandler: false,\n    appendNamespaceToMissingKey: false,\n    appendNamespaceToCIMode: false,\n    overloadTranslationOptionHandler: function handle(args) {\n      let ret = {};\n      if (typeof args[1] === 'object') ret = args[1];\n      if (typeof args[1] === 'string') ret.defaultValue = args[1];\n      if (typeof args[2] === 'string') ret.tDescription = args[2];\n      if (typeof args[2] === 'object' || typeof args[3] === 'object') {\n        const options = args[3] || args[2];\n        Object.keys(options).forEach(key => {\n          ret[key] = options[key];\n        });\n      }\n      return ret;\n    },\n    interpolation: {\n      escapeValue: true,\n      format: value => value,\n      prefix: '{{',\n      suffix: '}}',\n      formatSeparator: ',',\n      unescapePrefix: '-',\n      nestingPrefix: '$t(',\n      nestingSuffix: ')',\n      nestingOptionsSeparator: ',',\n      maxReplaces: 1000,\n      skipOnVariables: true\n    }\n  };\n}\nfunction transformOptions(options) {\n  if (typeof options.ns === 'string') options.ns = [options.ns];\n  if (typeof options.fallbackLng === 'string') options.fallbackLng = [options.fallbackLng];\n  if (typeof options.fallbackNS === 'string') options.fallbackNS = [options.fallbackNS];\n  if (options.supportedLngs && options.supportedLngs.indexOf('cimode') < 0) {\n    options.supportedLngs = options.supportedLngs.concat(['cimode']);\n  }\n  return options;\n}\n\nfunction noop() {}\nfunction bindMemberFunctions(inst) {\n  const mems = Object.getOwnPropertyNames(Object.getPrototypeOf(inst));\n  mems.forEach(mem => {\n    if (typeof inst[mem] === 'function') {\n      inst[mem] = inst[mem].bind(inst);\n    }\n  });\n}\nclass I18n extends EventEmitter {\n  constructor() {\n    let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    let callback = arguments.length > 1 ? arguments[1] : undefined;\n    super();\n    this.options = transformOptions(options);\n    this.services = {};\n    this.logger = baseLogger;\n    this.modules = {\n      external: []\n    };\n    bindMemberFunctions(this);\n    if (callback && !this.isInitialized && !options.isClone) {\n      if (!this.options.initImmediate) {\n        this.init(options, callback);\n        return this;\n      }\n      setTimeout(() => {\n        this.init(options, callback);\n      }, 0);\n    }\n  }\n  init() {\n    var _this = this;\n    let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    let callback = arguments.length > 1 ? arguments[1] : undefined;\n    if (typeof options === 'function') {\n      callback = options;\n      options = {};\n    }\n    if (!options.defaultNS && options.defaultNS !== false && options.ns) {\n      if (typeof options.ns === 'string') {\n        options.defaultNS = options.ns;\n      } else if (options.ns.indexOf('translation') < 0) {\n        options.defaultNS = options.ns[0];\n      }\n    }\n    const defOpts = get();\n    this.options = {\n      ...defOpts,\n      ...this.options,\n      ...transformOptions(options)\n    };\n    if (this.options.compatibilityAPI !== 'v1') {\n      this.options.interpolation = {\n        ...defOpts.interpolation,\n        ...this.options.interpolation\n      };\n    }\n    if (options.keySeparator !== undefined) {\n      this.options.userDefinedKeySeparator = options.keySeparator;\n    }\n    if (options.nsSeparator !== undefined) {\n      this.options.userDefinedNsSeparator = options.nsSeparator;\n    }\n    function createClassOnDemand(ClassOrObject) {\n      if (!ClassOrObject) return null;\n      if (typeof ClassOrObject === 'function') return new ClassOrObject();\n      return ClassOrObject;\n    }\n    if (!this.options.isClone) {\n      if (this.modules.logger) {\n        baseLogger.init(createClassOnDemand(this.modules.logger), this.options);\n      } else {\n        baseLogger.init(null, this.options);\n      }\n      let formatter;\n      if (this.modules.formatter) {\n        formatter = this.modules.formatter;\n      } else if (typeof Intl !== 'undefined') {\n        formatter = Formatter;\n      }\n      const lu = new LanguageUtil(this.options);\n      this.store = new ResourceStore(this.options.resources, this.options);\n      const s = this.services;\n      s.logger = baseLogger;\n      s.resourceStore = this.store;\n      s.languageUtils = lu;\n      s.pluralResolver = new PluralResolver(lu, {\n        prepend: this.options.pluralSeparator,\n        compatibilityJSON: this.options.compatibilityJSON,\n        simplifyPluralSuffix: this.options.simplifyPluralSuffix\n      });\n      if (formatter && (!this.options.interpolation.format || this.options.interpolation.format === defOpts.interpolation.format)) {\n        s.formatter = createClassOnDemand(formatter);\n        s.formatter.init(s, this.options);\n        this.options.interpolation.format = s.formatter.format.bind(s.formatter);\n      }\n      s.interpolator = new Interpolator(this.options);\n      s.utils = {\n        hasLoadedNamespace: this.hasLoadedNamespace.bind(this)\n      };\n      s.backendConnector = new Connector(createClassOnDemand(this.modules.backend), s.resourceStore, s, this.options);\n      s.backendConnector.on('*', function (event) {\n        for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n          args[_key - 1] = arguments[_key];\n        }\n        _this.emit(event, ...args);\n      });\n      if (this.modules.languageDetector) {\n        s.languageDetector = createClassOnDemand(this.modules.languageDetector);\n        if (s.languageDetector.init) s.languageDetector.init(s, this.options.detection, this.options);\n      }\n      if (this.modules.i18nFormat) {\n        s.i18nFormat = createClassOnDemand(this.modules.i18nFormat);\n        if (s.i18nFormat.init) s.i18nFormat.init(this);\n      }\n      this.translator = new Translator(this.services, this.options);\n      this.translator.on('*', function (event) {\n        for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n          args[_key2 - 1] = arguments[_key2];\n        }\n        _this.emit(event, ...args);\n      });\n      this.modules.external.forEach(m => {\n        if (m.init) m.init(this);\n      });\n    }\n    this.format = this.options.interpolation.format;\n    if (!callback) callback = noop;\n    if (this.options.fallbackLng && !this.services.languageDetector && !this.options.lng) {\n      const codes = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);\n      if (codes.length > 0 && codes[0] !== 'dev') this.options.lng = codes[0];\n    }\n    if (!this.services.languageDetector && !this.options.lng) {\n      this.logger.warn('init: no languageDetector is used and no lng is defined');\n    }\n    const storeApi = ['getResource', 'hasResourceBundle', 'getResourceBundle', 'getDataByLanguage'];\n    storeApi.forEach(fcName => {\n      this[fcName] = function () {\n        return _this.store[fcName](...arguments);\n      };\n    });\n    const storeApiChained = ['addResource', 'addResources', 'addResourceBundle', 'removeResourceBundle'];\n    storeApiChained.forEach(fcName => {\n      this[fcName] = function () {\n        _this.store[fcName](...arguments);\n        return _this;\n      };\n    });\n    const deferred = defer();\n    const load = () => {\n      const finish = (err, t) => {\n        if (this.isInitialized && !this.initializedStoreOnce) this.logger.warn('init: i18next is already initialized. You should call init just once!');\n        this.isInitialized = true;\n        if (!this.options.isClone) this.logger.log('initialized', this.options);\n        this.emit('initialized', this.options);\n        deferred.resolve(t);\n        callback(err, t);\n      };\n      if (this.languages && this.options.compatibilityAPI !== 'v1' && !this.isInitialized) return finish(null, this.t.bind(this));\n      this.changeLanguage(this.options.lng, finish);\n    };\n    if (this.options.resources || !this.options.initImmediate) {\n      load();\n    } else {\n      setTimeout(load, 0);\n    }\n    return deferred;\n  }\n  loadResources(language) {\n    let callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;\n    let usedCallback = callback;\n    const usedLng = typeof language === 'string' ? language : this.language;\n    if (typeof language === 'function') usedCallback = language;\n    if (!this.options.resources || this.options.partialBundledLanguages) {\n      if (usedLng && usedLng.toLowerCase() === 'cimode' && (!this.options.preload || this.options.preload.length === 0)) return usedCallback();\n      const toLoad = [];\n      const append = lng => {\n        if (!lng) return;\n        if (lng === 'cimode') return;\n        const lngs = this.services.languageUtils.toResolveHierarchy(lng);\n        lngs.forEach(l => {\n          if (l === 'cimode') return;\n          if (toLoad.indexOf(l) < 0) toLoad.push(l);\n        });\n      };\n      if (!usedLng) {\n        const fallbacks = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);\n        fallbacks.forEach(l => append(l));\n      } else {\n        append(usedLng);\n      }\n      if (this.options.preload) {\n        this.options.preload.forEach(l => append(l));\n      }\n      this.services.backendConnector.load(toLoad, this.options.ns, e => {\n        if (!e && !this.resolvedLanguage && this.language) this.setResolvedLanguage(this.language);\n        usedCallback(e);\n      });\n    } else {\n      usedCallback(null);\n    }\n  }\n  reloadResources(lngs, ns, callback) {\n    const deferred = defer();\n    if (!lngs) lngs = this.languages;\n    if (!ns) ns = this.options.ns;\n    if (!callback) callback = noop;\n    this.services.backendConnector.reload(lngs, ns, err => {\n      deferred.resolve();\n      callback(err);\n    });\n    return deferred;\n  }\n  use(module) {\n    if (!module) throw new Error('You are passing an undefined module! Please check the object you are passing to i18next.use()');\n    if (!module.type) throw new Error('You are passing a wrong module! Please check the object you are passing to i18next.use()');\n    if (module.type === 'backend') {\n      this.modules.backend = module;\n    }\n    if (module.type === 'logger' || module.log && module.warn && module.error) {\n      this.modules.logger = module;\n    }\n    if (module.type === 'languageDetector') {\n      this.modules.languageDetector = module;\n    }\n    if (module.type === 'i18nFormat') {\n      this.modules.i18nFormat = module;\n    }\n    if (module.type === 'postProcessor') {\n      postProcessor.addPostProcessor(module);\n    }\n    if (module.type === 'formatter') {\n      this.modules.formatter = module;\n    }\n    if (module.type === '3rdParty') {\n      this.modules.external.push(module);\n    }\n    return this;\n  }\n  setResolvedLanguage(l) {\n    if (!l || !this.languages) return;\n    if (['cimode', 'dev'].indexOf(l) > -1) return;\n    for (let li = 0; li < this.languages.length; li++) {\n      const lngInLngs = this.languages[li];\n      if (['cimode', 'dev'].indexOf(lngInLngs) > -1) continue;\n      if (this.store.hasLanguageSomeTranslations(lngInLngs)) {\n        this.resolvedLanguage = lngInLngs;\n        break;\n      }\n    }\n  }\n  changeLanguage(lng, callback) {\n    var _this2 = this;\n    this.isLanguageChangingTo = lng;\n    const deferred = defer();\n    this.emit('languageChanging', lng);\n    const setLngProps = l => {\n      this.language = l;\n      this.languages = this.services.languageUtils.toResolveHierarchy(l);\n      this.resolvedLanguage = undefined;\n      this.setResolvedLanguage(l);\n    };\n    const done = (err, l) => {\n      if (l) {\n        setLngProps(l);\n        this.translator.changeLanguage(l);\n        this.isLanguageChangingTo = undefined;\n        this.emit('languageChanged', l);\n        this.logger.log('languageChanged', l);\n      } else {\n        this.isLanguageChangingTo = undefined;\n      }\n      deferred.resolve(function () {\n        return _this2.t(...arguments);\n      });\n      if (callback) callback(err, function () {\n        return _this2.t(...arguments);\n      });\n    };\n    const setLng = lngs => {\n      if (!lng && !lngs && this.services.languageDetector) lngs = [];\n      const l = typeof lngs === 'string' ? lngs : this.services.languageUtils.getBestMatchFromCodes(lngs);\n      if (l) {\n        if (!this.language) {\n          setLngProps(l);\n        }\n        if (!this.translator.language) this.translator.changeLanguage(l);\n        if (this.services.languageDetector && this.services.languageDetector.cacheUserLanguage) this.services.languageDetector.cacheUserLanguage(l);\n      }\n      this.loadResources(l, err => {\n        done(err, l);\n      });\n    };\n    if (!lng && this.services.languageDetector && !this.services.languageDetector.async) {\n      setLng(this.services.languageDetector.detect());\n    } else if (!lng && this.services.languageDetector && this.services.languageDetector.async) {\n      if (this.services.languageDetector.detect.length === 0) {\n        this.services.languageDetector.detect().then(setLng);\n      } else {\n        this.services.languageDetector.detect(setLng);\n      }\n    } else {\n      setLng(lng);\n    }\n    return deferred;\n  }\n  getFixedT(lng, ns, keyPrefix) {\n    var _this3 = this;\n    const fixedT = function (key, opts) {\n      let options;\n      if (typeof opts !== 'object') {\n        for (var _len3 = arguments.length, rest = new Array(_len3 > 2 ? _len3 - 2 : 0), _key3 = 2; _key3 < _len3; _key3++) {\n          rest[_key3 - 2] = arguments[_key3];\n        }\n        options = _this3.options.overloadTranslationOptionHandler([key, opts].concat(rest));\n      } else {\n        options = {\n          ...opts\n        };\n      }\n      options.lng = options.lng || fixedT.lng;\n      options.lngs = options.lngs || fixedT.lngs;\n      options.ns = options.ns || fixedT.ns;\n      options.keyPrefix = options.keyPrefix || keyPrefix || fixedT.keyPrefix;\n      const keySeparator = _this3.options.keySeparator || '.';\n      let resultKey;\n      if (options.keyPrefix && Array.isArray(key)) {\n        resultKey = key.map(k => `${options.keyPrefix}${keySeparator}${k}`);\n      } else {\n        resultKey = options.keyPrefix ? `${options.keyPrefix}${keySeparator}${key}` : key;\n      }\n      return _this3.t(resultKey, options);\n    };\n    if (typeof lng === 'string') {\n      fixedT.lng = lng;\n    } else {\n      fixedT.lngs = lng;\n    }\n    fixedT.ns = ns;\n    fixedT.keyPrefix = keyPrefix;\n    return fixedT;\n  }\n  t() {\n    return this.translator && this.translator.translate(...arguments);\n  }\n  exists() {\n    return this.translator && this.translator.exists(...arguments);\n  }\n  setDefaultNamespace(ns) {\n    this.options.defaultNS = ns;\n  }\n  hasLoadedNamespace(ns) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    if (!this.isInitialized) {\n      this.logger.warn('hasLoadedNamespace: i18next was not initialized', this.languages);\n      return false;\n    }\n    if (!this.languages || !this.languages.length) {\n      this.logger.warn('hasLoadedNamespace: i18n.languages were undefined or empty', this.languages);\n      return false;\n    }\n    const lng = options.lng || this.resolvedLanguage || this.languages[0];\n    const fallbackLng = this.options ? this.options.fallbackLng : false;\n    const lastLng = this.languages[this.languages.length - 1];\n    if (lng.toLowerCase() === 'cimode') return true;\n    const loadNotPending = (l, n) => {\n      const loadState = this.services.backendConnector.state[`${l}|${n}`];\n      return loadState === -1 || loadState === 2;\n    };\n    if (options.precheck) {\n      const preResult = options.precheck(this, loadNotPending);\n      if (preResult !== undefined) return preResult;\n    }\n    if (this.hasResourceBundle(lng, ns)) return true;\n    if (!this.services.backendConnector.backend || this.options.resources && !this.options.partialBundledLanguages) return true;\n    if (loadNotPending(lng, ns) && (!fallbackLng || loadNotPending(lastLng, ns))) return true;\n    return false;\n  }\n  loadNamespaces(ns, callback) {\n    const deferred = defer();\n    if (!this.options.ns) {\n      if (callback) callback();\n      return Promise.resolve();\n    }\n    if (typeof ns === 'string') ns = [ns];\n    ns.forEach(n => {\n      if (this.options.ns.indexOf(n) < 0) this.options.ns.push(n);\n    });\n    this.loadResources(err => {\n      deferred.resolve();\n      if (callback) callback(err);\n    });\n    return deferred;\n  }\n  loadLanguages(lngs, callback) {\n    const deferred = defer();\n    if (typeof lngs === 'string') lngs = [lngs];\n    const preloaded = this.options.preload || [];\n    const newLngs = lngs.filter(lng => preloaded.indexOf(lng) < 0);\n    if (!newLngs.length) {\n      if (callback) callback();\n      return Promise.resolve();\n    }\n    this.options.preload = preloaded.concat(newLngs);\n    this.loadResources(err => {\n      deferred.resolve();\n      if (callback) callback(err);\n    });\n    return deferred;\n  }\n  dir(lng) {\n    if (!lng) lng = this.resolvedLanguage || (this.languages && this.languages.length > 0 ? this.languages[0] : this.language);\n    if (!lng) return 'rtl';\n    const rtlLngs = ['ar', 'shu', 'sqr', 'ssh', 'xaa', 'yhd', 'yud', 'aao', 'abh', 'abv', 'acm', 'acq', 'acw', 'acx', 'acy', 'adf', 'ads', 'aeb', 'aec', 'afb', 'ajp', 'apc', 'apd', 'arb', 'arq', 'ars', 'ary', 'arz', 'auz', 'avl', 'ayh', 'ayl', 'ayn', 'ayp', 'bbz', 'pga', 'he', 'iw', 'ps', 'pbt', 'pbu', 'pst', 'prp', 'prd', 'ug', 'ur', 'ydd', 'yds', 'yih', 'ji', 'yi', 'hbo', 'men', 'xmn', 'fa', 'jpr', 'peo', 'pes', 'prs', 'dv', 'sam', 'ckb'];\n    const languageUtils = this.services && this.services.languageUtils || new LanguageUtil(get());\n    return rtlLngs.indexOf(languageUtils.getLanguagePartFromCode(lng)) > -1 || lng.toLowerCase().indexOf('-arab') > 1 ? 'rtl' : 'ltr';\n  }\n  static createInstance() {\n    let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    let callback = arguments.length > 1 ? arguments[1] : undefined;\n    return new I18n(options, callback);\n  }\n  cloneInstance() {\n    let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    let callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;\n    const forkResourceStore = options.forkResourceStore;\n    if (forkResourceStore) delete options.forkResourceStore;\n    const mergedOptions = {\n      ...this.options,\n      ...options,\n      ...{\n        isClone: true\n      }\n    };\n    const clone = new I18n(mergedOptions);\n    if (options.debug !== undefined || options.prefix !== undefined) {\n      clone.logger = clone.logger.clone(options);\n    }\n    const membersToCopy = ['store', 'services', 'language'];\n    membersToCopy.forEach(m => {\n      clone[m] = this[m];\n    });\n    clone.services = {\n      ...this.services\n    };\n    clone.services.utils = {\n      hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone)\n    };\n    if (forkResourceStore) {\n      clone.store = new ResourceStore(this.store.data, mergedOptions);\n      clone.services.resourceStore = clone.store;\n    }\n    clone.translator = new Translator(clone.services, mergedOptions);\n    clone.translator.on('*', function (event) {\n      for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n        args[_key4 - 1] = arguments[_key4];\n      }\n      clone.emit(event, ...args);\n    });\n    clone.init(mergedOptions, callback);\n    clone.translator.options = mergedOptions;\n    clone.translator.backendConnector.services.utils = {\n      hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone)\n    };\n    return clone;\n  }\n  toJSON() {\n    return {\n      options: this.options,\n      store: this.store,\n      language: this.language,\n      languages: this.languages,\n      resolvedLanguage: this.resolvedLanguage\n    };\n  }\n}\nconst instance = I18n.createInstance();\ninstance.createInstance = I18n.createInstance;\n\nconst createInstance = instance.createInstance;\nconst dir = instance.dir;\nconst init = instance.init;\nconst loadResources = instance.loadResources;\nconst reloadResources = instance.reloadResources;\nconst use = instance.use;\nconst changeLanguage = instance.changeLanguage;\nconst getFixedT = instance.getFixedT;\nconst t = instance.t;\nconst exists = instance.exists;\nconst setDefaultNamespace = instance.setDefaultNamespace;\nconst hasLoadedNamespace = instance.hasLoadedNamespace;\nconst loadNamespaces = instance.loadNamespaces;\nconst loadLanguages = instance.loadLanguages;\n\nexport { changeLanguage, createInstance, instance as default, dir, exists, getFixedT, hasLoadedNamespace, init, loadLanguages, loadNamespaces, loadResources, reloadResources, setDefaultNamespace, t, use };\n"],"mappings":"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"},"metadata":{},"sourceType":"module","externalDependencies":[]}