function process(oObject, oResourceBundle, iCurrentLevel, iMaxLevel, oParams, oDataSources, oFilters) {
		if (iCurrentLevel === iMaxLevel) {
			return;
		}

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

@private
@param {Object} oObject The Manifest to process.
@param {Object} oResourceBundle The resource bundle to use for translation.
@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.
@param {Object} oDataSources The dataSources to be replaced in the manifest.