text: this.t = function(key, ...replaces) {
  	if (_.isObject(replaces[0])) {
  		return TAPi18n.__(key, replaces);
  	} else {
  		return TAPi18n.__(key, {
  			postProcess: 'sprintf',
  			sprintf: replaces
  		});
  	}
  };
  
  this.tr = function(key, options, ...replaces) {
  	if (_.isObject(replaces[0])) {
  		return TAPi18n.__(key, options, replaces);
  	} else {
  		return TAPi18n.__(key, options, {
  			postProcess: 'sprintf',
  			sprintf: replaces
  		});
  	}
  };
  
  this.isRtl = (language) => language != null && ['ar', 'dv', 'fa', 'he', 'ku', 'ps', 'sd', 'ug', 'ur', 'yi'].includes(language.split('-').shift().toLowerCase());
  