From Joomla! Documentation

< API15:JInstaller
Revision as of 16:24, 22 March 2010 by Doxiki (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Replacement filing cabinet.png
This Namespace has been archived - Please Do Not Edit or Create Pages in this namespace. Pages contain information for a Joomla! version which is no longer supported. It exists only as a historical reference, will not be improved and its content may be incomplete.


Method to parse through a languages element of the installation manifest and take appropriate action.

[Edit Descripton]



parseLanguages($element, $cid=0)
Parameter Name Default Value Description
$element $element The xml node to process
$cid 0 $cid Application ID of application to install to


boolean True on success

Defined in



jimport( 'joomla.installer.installer' );

Source Body

function parseLanguages($element, $cid=0)
        // Initialize variables
        $copyfiles = array ();
        // Get the client info
        $client =& JApplicationHelper::getClientInfo($cid);
        if (!is_a($element, 'JSimpleXMLElement') || !count($element->children())) {
                // Either the tag does not exist or has no children therefore we return zero files processed.
                return 0;
        // Get the array of file nodes to process
        $files = $element->children();
        if (count($files) == 0) {
                // No files to process
                return 0;
         * Here we set the folder we are going to copy the files to.
         * 'languages' Files are copied to JPATH_BASE/language/ folder
        $destination = $client->path.DS.'language';
         * Here we set the folder we are going to copy the files from.
         * Does the element have a folder attribute?
         * If so this indicates that the files are in a subdirectory of the source
         * folder and we should append the folder attribute to the source path when
         * copying files.
        if ($folder = $element->attributes('folder')) {
                $source = $this->getPath('source').DS.$folder;
        } else {
                $source = $this->getPath('source');
        // Process each file in the $files array (children of $tagName).
        foreach ($files as $file)
                 * Language files go in a subfolder based on the language code, ie.
                 *              <language tag="en-US">en-US.mycomponent.ini</language>
                 * would go in the en-US subdirectory of the language folder.
                 * We will only install language files where a core language pack
                 * already exists.
                if ($file->attributes('tag') != '') {
                        $path['src']    = $source.DS.$file->data();
                        $path['dest']   = $destination.DS.$file->attributes('tag').DS.basename($file->data());
                        // If the language folder is not present, then the core pack hasn't been installed... ignore
                        if (!JFolder::exists(dirname($path['dest']))) {
                } else {
                        $path['src']    = $source.DS.$file->data();
                        $path['dest']   = $destination.DS.$file->data();
                 * Before we can add a file to the copyfiles array we need to ensure
                 * that the folder we are copying our file to exits and if it doesn't,
                 * we need to create it.
                if (basename($path['dest']) != $path['dest']) {
                        $newdir = dirname($path['dest']);
                        if (!JFolder::create($newdir)) {
                                JError::raiseWarning(1, 'JInstaller::install: '.JText::_('Failed to create directory').' "'.$newdir.'"');
                                return false;
                // Add the file to the copyfiles array
                $copyfiles[] = $path;
        return $this->copyFiles($copyfiles);

[Edit See Also] SeeAlso:JInstaller/parseLanguages


<CodeExamplesForm />