Personnellement j'utilise ceci pour gerer les languages.
Pour ce qui est du stockage des variables, il y a deux fichier, le fichier de langue du core, et le fichier de langue du module en cours.
L'array contenu dans les deux fichier est fusionné.
Au premier niveau, l'index du tableau est l'indicatif de language(en, fr...);
Ensuite, au second niveau, on se retrouve avec le nom de la variable en index.
Si une clef est manquante dans le langage courant, on cherche dans le langage par défaut, ce qui évite de se retrouver avec des vides et si la variable n'est pas trouvée, ca affiche une erreur.
Actuellement, cette classe n'est que php5, mais avec deux trois petites modifications, ca se retrouve compatible php4
<?php
/**
* @package : language.lib.php
* @version 1.0
* @copyright (c)2007 momox
*/
class language {
/**
* Variable contenant la langue principale
*
* @var string
*/
private $lang;
/**
* Variable contenant la langue par defaut
*
* @var string
*/
private $default_lang;
/**
* Variable contenant les variables de langue
*
* @var array
*/
private $lang_defs;
/**
* Constructeur de la classe
*
* @param string $module
* @param string $lang
* @param string $default_lang
* @return void
*/
public function __construct($module, $lang, $default_lang) {
//On vérifie que les fichiers necessaires au langage sont présents
$files_needed = array(dirname(__FILE__).'/../language/lang.php', dirname(__FILE__).'/../modules/'.$module.'/language/lang.php');
if(file_exists($files_needed[0])) {
//on définit les variables spécifiant la langue
$this->lang = $lang;
$this->default_lang = $default_lang;
//on inclut les fichiers de langue necessaires
require($files_needed[0]);
if(file_exists($files_needed[1])) {
require($files_needed[1]);
}
//on fusionne les deux tableau
if(isset($lang_core) && is_array($lang_core) && !empty($lang_core)) {
if(isset($lang_mod) && is_array($lang_mod) && !empty($lang_mod)) {
$this->lang_defs = array_merge_recursive($lang_core, $lang_mod);
}
else {
$this->lang_defs = $lang_core;
}
}
else {
throw new Exception('$lang_core array is missing');
}
}
else {
Throw new Exception('Missing lang files in the following list: <br /> -'.implode('<br /> -', $files_needed), E_USER_ERROR);
}
}
/**
* Verifie l'existence de la variable de langue
*
* @param string $var
* @return bool
*/
final private function lang_key_exists($var) {
if(isset($this->lang_defs[$this->lang][$var])) {
return true;
}
elseif(isset($this->lang_defs[$this->default_lang][$var])) {
return true;
}
else {
return false;
}
}
/**
* Retourne la variable de langue spécifiée
*
* @param string $var
* @return string
*/
final private function lang_get_key($var) {
if(isset($this->lang_defs[$this->lang][$var])) {
return $this->lang_defs[$this->lang][$var];
}
elseif(isset($this->lang_defs[$this->default_lang][$var])) {
return $this->lang_defs[$this->default_lang][$var];
}
else {
throw new Exception('Missing lang key for '.$var);
}
}
/**
* Parse un texte avec la variable de langage spécifiée
*
* @param string $var
* @param string $args,...
* @return string
*/
final public function parse_lang_var($var) {
$args = func_get_args();
//on enleve $var du tableau pour ne garder que les arguments
array_shift($args);
//on vérifie l'existence de la variable de langue
if($this->lang_key_exists($var)) {
//on récupere la variable de langue
$lang_var = $this->lang_get_key($var);
if(!empty($args)) {
$exp = '$string = sprintf($lang_var, \''.implode("', '", $args).'\');';
eval($exp);
}
else {
$string = $lang_var;
}
return $string;
}
else {
throw new Exception('Missing lang key for '.$var);
}
}
}
?>
lang_core.php
<?php
/**
* @package : lang.php
* @version 1.0
* @copyright (c)2007 momox
* @author Geekimo : [email protected]
*/
$lang_core = array();
//Francais
$lang = 'fr';
$lang_core[$lang]['guest'] = 'Invité';
$lang_core[$lang]['member'] = 'Membre';
$lang_core[$lang]['modo'] = 'Modérateur';
$lang_core[$lang]['admin'] = 'Administrateur';
$lang_core[$lang]['yes'] = 'Oui';
$lang_core[$lang]['no'] = 'Non';
$lang_core[$lang]['none'] = 'Aucun';
$lang_core[$lang]['other'] = 'Autre';
//English
$lang = 'en';
$lang_core[$lang]['guest'] = 'Guest';
$lang_core[$lang]['member'] = 'Member';
$lang_core[$lang]['modo'] = 'Moderator';
$lang_core[$lang]['admin'] = 'Administrator';
$lang_core[$lang]['yes'] = 'Yes';
$lang_core[$lang]['no'] = 'No';
$lang_core[$lang]['none'] = 'None';
$lang_core[$lang]['other'] = 'Other';
?>
Fichier lang_mod.php
<?php
/**
* @package : lang.php
* @version 1.0
* @copyright (c)2007momox
* @author Geekimo : [email protected]
*/
$lang_mod = array();
//Francais
$lang = 'fr';
$lang_mod[$lang]['cat_move'] = 'Déplacer une catégorie';
$lang_mod[$lang]['cat_destination'] = 'Catégorie de destination';
$lang_mod[$lang]['missing_cat_destination'] = 'Veuillez indiquer la catégorie de destination';
$lang_mod[$lang]['cat_root'] = 'Racine';
$lang_mod[$lang]['doc_move'] = 'Déplacer le document';
$lang_mod[$lang]['confirm_delete_category'] = 'Voulez vous supprimer la categorie %s ?';
//English
$lang = 'en';
$lang_mod[$lang]['cat_move'] = 'Move a category';
$lang_mod[$lang]['cat_destination'] = 'Catégorie de destination';
$lang_mod[$lang]['missing_cat_destination'] = 'Please indicate destination\'s category';
$lang_mod[$lang]['cat_root'] = 'Root';
$lang_mod[$lang]['doc_move'] = 'Move the document';
$lang_mod[$lang]['confirm_delete_category'] = 'Do you really want to delete %s category ?';
?>
Voila, je poste ces codes a titre d'exemple

Personnellement j'utilise ceci pour gerer les languages.
Pour ce qui est du stockage des variables, il y a deux fichier, le fichier de langue du core, et le fichier de langue du module en cours.
L'array contenu dans les deux fichier est fusionné.
Au premier niveau, l'index du tableau est l'indicatif de language(en, fr...);
Ensuite, au second niveau, on se retrouve avec le nom de la variable en index.
Si une clef est manquante dans le langage courant, on cherche dans le langage par défaut, ce qui évite de se retrouver avec des vides et si la variable n'est pas trouvée, ca affiche une erreur.
Actuellement, cette classe n'est que php5, mais avec deux trois petites modifications, ca se retrouve compatible php4 ;)
[php]
<?php
/**
* @package : language.lib.php
* @version 1.0
* @copyright (c)2007 momox
*/
class language {
/**
* Variable contenant la langue principale
*
* @var string
*/
private $lang;
/**
* Variable contenant la langue par defaut
*
* @var string
*/
private $default_lang;
/**
* Variable contenant les variables de langue
*
* @var array
*/
private $lang_defs;
/**
* Constructeur de la classe
*
* @param string $module
* @param string $lang
* @param string $default_lang
* @return void
*/
public function __construct($module, $lang, $default_lang) {
//On vérifie que les fichiers necessaires au langage sont présents
$files_needed = array(dirname(__FILE__).'/../language/lang.php', dirname(__FILE__).'/../modules/'.$module.'/language/lang.php');
if(file_exists($files_needed[0])) {
//on définit les variables spécifiant la langue
$this->lang = $lang;
$this->default_lang = $default_lang;
//on inclut les fichiers de langue necessaires
require($files_needed[0]);
if(file_exists($files_needed[1])) {
require($files_needed[1]);
}
//on fusionne les deux tableau
if(isset($lang_core) && is_array($lang_core) && !empty($lang_core)) {
if(isset($lang_mod) && is_array($lang_mod) && !empty($lang_mod)) {
$this->lang_defs = array_merge_recursive($lang_core, $lang_mod);
}
else {
$this->lang_defs = $lang_core;
}
}
else {
throw new Exception('$lang_core array is missing');
}
}
else {
Throw new Exception('Missing lang files in the following list: <br /> -'.implode('<br /> -', $files_needed), E_USER_ERROR);
}
}
/**
* Verifie l'existence de la variable de langue
*
* @param string $var
* @return bool
*/
final private function lang_key_exists($var) {
if(isset($this->lang_defs[$this->lang][$var])) {
return true;
}
elseif(isset($this->lang_defs[$this->default_lang][$var])) {
return true;
}
else {
return false;
}
}
/**
* Retourne la variable de langue spécifiée
*
* @param string $var
* @return string
*/
final private function lang_get_key($var) {
if(isset($this->lang_defs[$this->lang][$var])) {
return $this->lang_defs[$this->lang][$var];
}
elseif(isset($this->lang_defs[$this->default_lang][$var])) {
return $this->lang_defs[$this->default_lang][$var];
}
else {
throw new Exception('Missing lang key for '.$var);
}
}
/**
* Parse un texte avec la variable de langage spécifiée
*
* @param string $var
* @param string $args,...
* @return string
*/
final public function parse_lang_var($var) {
$args = func_get_args();
//on enleve $var du tableau pour ne garder que les arguments
array_shift($args);
//on vérifie l'existence de la variable de langue
if($this->lang_key_exists($var)) {
//on récupere la variable de langue
$lang_var = $this->lang_get_key($var);
if(!empty($args)) {
$exp = '$string = sprintf($lang_var, \''.implode("', '", $args).'\');';
eval($exp);
}
else {
$string = $lang_var;
}
return $string;
}
else {
throw new Exception('Missing lang key for '.$var);
}
}
}
?>[/php]
lang_core.php
[php]<?php
/**
* @package : lang.php
* @version 1.0
* @copyright (c)2007 momox
* @author Geekimo :
[email protected]*/
$lang_core = array();
//Francais
$lang = 'fr';
$lang_core[$lang]['guest'] = 'Invité';
$lang_core[$lang]['member'] = 'Membre';
$lang_core[$lang]['modo'] = 'Modérateur';
$lang_core[$lang]['admin'] = 'Administrateur';
$lang_core[$lang]['yes'] = 'Oui';
$lang_core[$lang]['no'] = 'Non';
$lang_core[$lang]['none'] = 'Aucun';
$lang_core[$lang]['other'] = 'Autre';
//English
$lang = 'en';
$lang_core[$lang]['guest'] = 'Guest';
$lang_core[$lang]['member'] = 'Member';
$lang_core[$lang]['modo'] = 'Moderator';
$lang_core[$lang]['admin'] = 'Administrator';
$lang_core[$lang]['yes'] = 'Yes';
$lang_core[$lang]['no'] = 'No';
$lang_core[$lang]['none'] = 'None';
$lang_core[$lang]['other'] = 'Other';
?>[/php]
Fichier lang_mod.php
[php]<?php
/**
* @package : lang.php
* @version 1.0
* @copyright (c)2007momox
* @author Geekimo :
[email protected]*/
$lang_mod = array();
//Francais
$lang = 'fr';
$lang_mod[$lang]['cat_move'] = 'Déplacer une catégorie';
$lang_mod[$lang]['cat_destination'] = 'Catégorie de destination';
$lang_mod[$lang]['missing_cat_destination'] = 'Veuillez indiquer la catégorie de destination';
$lang_mod[$lang]['cat_root'] = 'Racine';
$lang_mod[$lang]['doc_move'] = 'Déplacer le document';
$lang_mod[$lang]['confirm_delete_category'] = 'Voulez vous supprimer la categorie %s ?';
//English
$lang = 'en';
$lang_mod[$lang]['cat_move'] = 'Move a category';
$lang_mod[$lang]['cat_destination'] = 'Catégorie de destination';
$lang_mod[$lang]['missing_cat_destination'] = 'Please indicate destination\'s category';
$lang_mod[$lang]['cat_root'] = 'Root';
$lang_mod[$lang]['doc_move'] = 'Move the document';
$lang_mod[$lang]['confirm_delete_category'] = 'Do you really want to delete %s category ?';
?>[/php]
Voila, je poste ces codes a titre d'exemple ;)