Abilitare la scelta della lingua in Joomla

Joomla 1.5 permette di presentare un sito in molteplici lingue, ma non è previsto lo switch di un linguaggio tramite parametro URL: bisogna che l'utente scelga la lingua di preferenza dalle proprie impostazioni utente - il che richiede anche che l'utente sia registrato.

Ovviamente per tradurre il contenuto di un sito è necessario usare JoomFish, ma per una semplice traduzione di moduli o componenti custom JoomFish è eccessivo.

Per presentare una lingua diversa a seconda del valore di un parametro 'lang' inserito nell'URL è possibile usare un system plugin, come questo:

 
< ?php
// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );
 
jimport('joomla.event.plugin');
 
class plgSystemSetLanguage extends JPlugin
{
    public function plgSystemSetLanguage( &$subject )
    {
		parent::__construct( $subject );
		$this->setLanguage();
    }
 
    function setLanguage()
    {
		global $mainframe;
 
    	        $default = $this->getDefaultLanguage();
		$selected = $this->getRequestedLanguage();
 
		if (($selected != '') && ($selected != $default))
		{
			$options = array();
			$options['language'] = $selected;
			$mainframe->initialise($options);
		}
    }
 
	function getRequestedLanguage()
	{
		$lang = JRequest::getString('lang');
 
		if ($lang=='en') $lang='en-GB';
		if ($lang=='it') $lang='it-IT';
 
		if (($lang != '') && JLanguage::exists($lang))
		{
			return $lang;
		}
	}
 
	function getDefaultLanguage()
	{
		$user = & JFactory::getUser();
		$lang = $user->getParam('language');
 
		if ($lang && JLanguage::exists($lang))
		{
			return $lang;
		}
		else
		{
			$params = JComponentHelper::getParams('com_languages');
			$client	=& JApplicationHelper::getClientInfo(0);
			$lang = $params->get($client->name, 'en-GB');
 
			if (!JLanguage::exists( $lang ))
			{
				$lang = 'en-GB';
			}
 
			return $lang;
		}
	}
}
?>
 

Al variare del parametro, es. 'lang=it' o 'lang=en', Joomla pescherà le stringhe di moduli e componenti nella lingua prescelta. Ovviamente deve essere installata nel sistema la traduzione relativa alla lingua di interesse.