Une classe qui gère tes langues (ou alors gettext mais çà ecarte l'hébergement mutualisé)
Voici une classe text simplifié en php4:
NB: il faut remplacer $conf->__get('general__default_lang') par la langue par défaut et définir URI_ROOT comme chemin au répertoire de baseVoici une classe text simplifié en php4:
Code PHP :
<?php
/**
* Fichier de classes text
*
* Ce fichier à pour but de fournir des objets permetant de
* gérer les problèmes de localisation et de gestion des
* textes dans un codes.
*
* @author LJF alias Zamentur
* @version 0.1 with php4.3
* @package ljf_framework
* @copyright Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported
* http://creativecommons.org/licenses/by-nc-sa/3.0/
*/
/**
* La classe text ici réduite pour php4 permt de centraliser
* les texte et de gérer leur internationalisation
* @subpackage core
*/
class text {
var $lang;
var $text_loaded;
/**
* Demande l'objet text correspondant à une langue ou le créé si inexistant
* @static
* @param (string) $lang : chaine de moins de 3 caractères décrivant la
* langue dans le système de gestion des textes
* @return (text) Retourne l'objet text correspondant à une langue ou le
* créé si inexistant
*/
function &get_instance($lang=Null) {
static $instance=array();
global $conf;
if (is_Null($lang)) $lang=$conf->__get('general__default_lang');
if (!isset($instance[$lang]) || !is_a($instance[$lang],'text'))
if (is_dir(URI_ROOT.'lang/'.$lang.'/'))
$instance[$lang]=&new text($lang);
return $instance[$lang];
}
/**
* Construit l'objet text dans la langue spécifié
* @access private
* @param (string) $lang : chaine de moins de 3 caractères décrivant la
* langue dans le système de gestion des textes
* @return (text): créer un objet texte
*/
function text($lang) {
$this->lang=$lang;
if (defined($this->lang.'_text_singleton_locker'))
error('g_error__singleton');
define($this->lang.'_text_singleton_locker', true);
}
function __get($name) {
return $this->get($name);
}
/**
* Renvoie le texte correspondant à une idée dans la langue de l'objet
* appelant
* @param (string) $name Identifiant permetant de localiser une idée
* dans le systèle de fichier lang
* @param (mixed)[$arg1,[...,[argn : Paramètre tierce de l'idée
* @return (string) Renvoie le texte correspondant à l'idée
*/
function get($name) {
$liste_args = func_get_args();
$sentence = $this->load_text(array_shift($liste_args));
return vsprintf($sentence,$liste_args);
}
/**
* Charge le texte correspondant à une idée dans la bibliothèque de sens si
* il est absent
* @access private
* @param (string) $name : Identifiant permetant de localiser l'idée dans le
* système de fichier lang
* @return (array|string) : Renvoie une phrase dynamique dans laquel pourra
* être inséré éventuellement des paramètres
*/
function load_text($name) {
$data=explode('__',$name);
if (!isset($this->text_loaded[$data[0]])){
$url=URI_ROOT.'lang/'.$this->lang.'/'.$data[0].'.'.$this->lang.'.lang.php';
$this->text_loaded[$data[0]]=require_once($url);
}
return $this->text_loaded[$data[0]][$data[1]];
}
}
Un fichier langue ressemble alors à çà:
lang/fr/mes_text.fr.lang.php
Code PHP :
<?php
$result=array();
$result['connect']='Vous êtes connecté sous %s';
$result['connect_failed']='La connexion à échoué!';
$result['disconnect']='Vous êtes maintenant déconnecté!';
$result['register_ok']='Inscription réussie!';
$result['register_failed']='L\'inscription à échoué';
$result['connect_action']='Me connecter!';
$result['disconnect_action']='Me déconnecter!';
$result['attack']='%s vous attaque!';
return $result;