developer.jelix.org is not used any more and exists only for history. Post new tickets on the Github account.
developer.jelix.org n'est plus utilisée, et existe uniquement pour son historique. Postez les nouveaux tickets sur le compte github.

Opened 11 years ago

Last modified 9 years ago

#1110 delayed new feature

Proposition de gestion des locales en javascript

Reported by: hadrien Owned by:
Priority: normal Milestone:
Component: jelix Version: 1.1.6
Severity: normal Keywords:
Cc: Blocked By:
Blocking: Documentation needed: no
Hosting Provider: Php version:

Description

Voici ce que j'ai implémenté dans ma réponse perso héritant de jResponseHTML qui pourrait être interressant d'avoir en bundle :

/**
 * JS Locales array
 *
 * @var array
 **/
protected $_jsLocales = array();
/**
 * Add a javascript locale
 *
 * @return void
 * @author Hadrien Lanneau (hadrien at over-blog dot com)
 **/
public function addJSLocale($locales = null)
{
	if (!is_null($locales) and
		is_array($locales))
	{
		foreach ($locales as $k => $l)
		{
			$this->_jsLocales[$k] = $l;
		}
	}
	return;
}

/**
 * Specific traitements
 *
 * @return void
 * @author Hadrien Lanneau (hadrien at over-blog dot com)
 **/
protected function doAfterActions()
{
	$json = new jJson();
	$this->addJSCode(
		'var __ = function(key)
		{
			var locales = ' .
			$json->encode(
				$this->_jsLocales
			) . ';
			if (locales[key])
			{
				return locales[key];
			}
			else
			{
				if (console &&
					console.error)
				{
					console.error("Locale " + key + " does not exists.");
				}
				return key;
			}
		};'
	);
}

Dans mon controller :

$rep = $this->getResponse('marep');
$rep->addJSLocale(
	array(
		'text.loading'	=> jLocale::get('module~fichier.text.loading'),
	)
);
return $rep;

Et dans mon js :

alert(
	__('text.loading');
);

Une erreur est affichée dans la console si la locale n'est pas settée.

Change History (1)

comment:1 Changed 9 years ago by laurentj

  • review review? deleted
  • Status changed from new to delayed
Note: See TracTickets for help on using tickets.