function process (oObject, oTranslator, iCurrentLevel, iMaxLevel, oParams) {
		if (iCurrentLevel === iMaxLevel) {
			return;
		}

		if (Array.isArray(oObject)) {
			oObject.forEach(function (vItem, iIndex, aArray) {
				if (typeof vItem === "object") {
					process(vItem, oTranslator, iCurrentLevel + 1, iMaxLevel, oParams);
				} else if (isProcessable(vItem, oObject, oParams)) {
					aArray[iIndex] = processPlaceholder(vItem, oParams);
				} else if (isTranslatable(vItem) && oTranslator) {
					aArray[iIndex] = oTranslator.getText(vItem.substring(2, vItem.length - 2));
				}
			}, this);
		} else {
			for (var sProp in oObject) {
				if (typeof oObject[sProp] === "object") {
					process(oObject[sProp], oTranslator, iCurrentLevel + 1, iMaxLevel, oParams);
				}  else if (isProcessable(oObject[sProp], oObject, oParams)) {
					oObject[sProp] = processPlaceholder(oObject[sProp], oParams);
				} else if (isTranslatable(oObject[sProp]) && oTranslator) {
					oObject[sProp] = oTranslator.getText(oObject[sProp].substring(2, oObject[sProp].length - 2));
				}
			}
		}
	}
function process (oObject, oTranslator, iCurrentLevel, iMaxLevel, oParams) {
		if (iCurrentLevel === iMaxLevel) {
			return;
		}

		if (Array.isArray(oObject)) {
			oObject.forEach(function (vItem, iIndex, aArray) {
				if (typeof vItem === "object") {
					process(vItem, oTranslator, iCurrentLevel + 1, iMaxLevel, oParams);
				} else if (isProcessable(vItem, oObject, oParams)) {
					aArray[iIndex] = processPlaceholder(vItem, oParams);
				} else if (isTranslatable(vItem) && oTranslator) {
					aArray[iIndex] = oTranslator.getText(vItem.substring(2, vItem.length - 2));
				}
			}, this);
		} else {
			for (var sProp in oObject) {
				if (typeof oObject[sProp] === "object") {
					process(oObject[sProp], oTranslator, iCurrentLevel + 1, iMaxLevel, oParams);
				}  else if (isProcessable(oObject[sProp], oObject, oParams)) {
					oObject[sProp] = processPlaceholder(oObject[sProp], oParams);
				} else if (isTranslatable(oObject[sProp]) && oTranslator) {
					oObject[sProp] = oTranslator.getText(oObject[sProp].substring(2, oObject[sProp].length - 2));
				}
			}
		}
	}
function process ( oObject , oTranslator , iCurrentLevel , iMaxLevel , oParams ) { if ( iCurrentLevel === iMaxLevel ) { return ; } if ( Array . isArray ( oObject ) ) { oObject . forEach ( function ( vItem , iIndex , aArray ) { if ( typeof vItem === "object" ) { process ( vItem , oTranslator , iCurrentLevel + 1 , iMaxLevel , oParams ) ; } else if ( isProcessable ( vItem , oObject , oParams ) ) { aArray [ iIndex ] = processPlaceholder ( vItem , oParams ) ; } else if ( isTranslatable ( vItem ) && oTranslator ) { aArray [ iIndex ] = oTranslator . getText ( vItem . substring ( 2 , vItem . length - 2 ) ) ; } } , this ) ; } else { for ( var sProp in oObject ) { if ( typeof oObject [ sProp ] === "object" ) { process ( oObject [ sProp ] , oTranslator , iCurrentLevel + 1 , iMaxLevel , oParams ) ; } else if ( isProcessable ( oObject [ sProp ] , oObject , oParams ) ) { oObject [ sProp ] = processPlaceholder ( oObject [ sProp ] , oParams ) ; } else if ( isTranslatable ( oObject [ sProp ] ) && oTranslator ) { oObject [ sProp ] = oTranslator . getText ( oObject [ sProp ] . substring ( 2 , oObject [ sProp ] . length - 2 ) ) ; } } } }
Process a manifest.

@private
@param {Object} oObject The Manifest to process.
@param {Object} oTranslator The translator.
@param {number} iCurrentLevel The current level of recursion.
@param {number} iMaxLevel The maximum level of recursion.
@param {Object} oParams The parameters to be replaced in the manifest.
Process a manifest .
Process an object