text: 'use strict';
  
  Object.defineProperty(exports, '__esModule', {
    value: true
  });
  exports.convertAPIOptions = convertAPIOptions;
  exports.convertJSONOptions = convertJSONOptions;
  exports.convertTOptions = convertTOptions;
  exports.appendBackwardsAPI = appendBackwardsAPI;
  
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
  
  var _logger = require('../logger');
  
  var _logger2 = _interopRequireDefault(_logger);
  
  function convertInterpolation(options) {
  
    options.interpolation = {
      unescapeSuffix: 'HTML'
    };
  
    options.interpolation.prefix = options.interpolationPrefix || '__';
    options.interpolation.suffix = options.interpolationSuffix || '__';
    options.interpolation.escapeValue = options.escapeInterpolation || false;
  
    options.interpolation.nestingPrefix = options.reusePrefix || '$t(';
    options.interpolation.nestingSuffix = options.reuseSuffix || ')';
  
    return options;
  }
  
  function convertAPIOptions(options) {
    if (options.resStore) options.resources = options.resStore;
  
    if (options.ns && options.ns.defaultNs) {
      options.defaultNS = options.ns.defaultNs;
      options.ns = options.ns.namespaces;
    } else {
      options.defaultNS = options.ns || 'translation';
    }
  
    if (options.fallbackToDefaultNS && options.defaultNS) options.fallbackNS = options.defaultNS;
  
    options.saveMissing = options.sendMissing;
    options.saveMissingTo = options.sendMissingTo || 'current';
    options.returnNull = options.fallbackOnNull ? false : true;
    options.returnEmptyString = options.fallbackOnEmpty ? false : true;
    options.returnObjects = options.returnObjectTrees;
    options.joinArrays = '\n';
  
    options.returnedObjectHandler = options.objectTreeKeyHandler;
    options.parseMissingKeyHandler = options.parseMissingKey;
    options.appendNamespaceToMissingKey = true;
  
    options.nsSeparator = options.nsseparator;
    options.keySeparator = options.keyseparator;
  
    if (options.shortcutFunction === 'sprintf') {
      options.overloadTranslationOptionHandler = function (args) {
        var values = [];
  
        for (var i = 1; i < args.length; i++) {
          values.push(args[i]);
        }
  
        return {
          postProcess: 'sprintf',
          sprintf: values
        };
      };
    }
  
    options.whitelist = options.lngWhitelist;
    options.preload = options.preload;
    if (options.load === 'current') options.load = 'currentOnly';
    if (options.load === 'unspecific') options.load = 'languageOnly';
  
    // backend
    options.backend = options.backend || {};
    options.backend.loadPath = options.resGetPath || 'locales/__lng__/__ns__.json';
    options.backend.addPath = options.resPostPath || 'locales/add/__lng__/__ns__';
    options.backend.allowMultiLoading = options.dynamicLoad;
  
    // cache
    options.cache = options.cache || {};
    options.cache.prefix = 'res_';
    options.cache.expirationTime = 7 * 24 * 60 * 60 * 1000;
    options.cache.enabled = options.useLocalStorage ? true : false;
  
    options = convertInterpolation(options);
    if (options.defaultVariables) options.interpolation.defaultVariables = options.defaultVariables;
  
    // TODO: deprecation
    // if (options.getAsync === false) throw deprecation error
  
    return options;
  }
  
  function convertJSONOptions(options) {
    options = convertInterpolation(options);
    options.joinArrays = '\n';
  
    return options;
  }
  
  function convertTOptions(options) {
    if (options.interpolationPrefix || options.interpolationSuffix || options.escapeInterpolation) {
      options = convertInterpolation(options);
    }
  
    options.nsSeparator = options.nsseparator;
    options.keySeparator = options.keyseparator;
  
    options.returnObjects = options.returnObjectTrees;
  
    return options;
  }
  
  function appendBackwardsAPI(i18n) {
    i18n.lng = function () {
      _logger2['default'].deprecate('i18next.lng() can be replaced by i18next.language for detected language or i18next.languages for languages ordered by translation lookup.');
      return i18n.services.languageUtils.toResolveHierarchy(i18n.language)[0];
    };
  
    i18n.preload = function (lngs, cb) {
      _logger2['default'].deprecate('i18next.preload() can be replaced with i18next.loadLanguages()');
      i18n.loadLanguages(lngs, cb);
    };
  
    i18n.setLng = function (lng, options, callback) {
      _logger2['default'].deprecate('i18next.setLng() can be replaced with i18next.changeLanguage() or i18next.getFixedT() to get a translation function with fixed language or namespace.');
      if (typeof options === 'function') {
        callback = options;
        options = {};
      }
      if (!options) options = {};
  
      if (options.fixLng === true) {
        if (callback) return callback(null, i18n.getFixedT(lng));
      }
  
      i18n.changeLanguage(lng, callback);
    };
  
    i18n.addPostProcessor = function (name, fc) {
      _logger2['default'].deprecate('i18next.addPostProcessor() can be replaced by i18next.use({ type: \'postProcessor\', name: \'name\', process: fc })');
      i18n.use({
        type: 'postProcessor',
        name: name,
        process: fc
      });
    };
  }