 | | Offres d'emplois |  | Développeur web PHP/MYSQL en alternance Web Agency, partenaire d'ip-formation, offrant des possibilités d'évolutions, recherche dans le cadre d'un contrat de professionnalisation un dével... | |
 | | Avez vous lu ? |  | | |
|
 Une classe pour gérer les traductions | |  |

<?php
class traductions {
// --- répertoire où sont stockés les fichiers de langue
var $rep_fichiers = '/var/html/traductions/';
// --- langue utilisée
var $langue = 'fr';
// --- nom de la base stockant les traductions
var $db = 'traductions';
// --- nom de la table stockant les traductions
var $table_mysql = 'traductions';
// --- affichage des messages de mise au point
var $debug = 0;
// --- ajout de traductions dans la base
function maj_traduction($cle, $tb_valeurs) {
// --- traduction existante ?
$cde = "select cle from $this->table_mysql
where cle like '$cle'";
$result = mysql_query($cde);
$nb = mysql_num_rows($result);
// --- la traduction existe déjà
if ($nb) {
$cde = $this->creation_requete_insertion(
$this->table_mysql, $tb_valeurs);
}
// --- la traduction n'existe pas
else {
$cde = $this->creation_requete_modification(
$this->table_mysql, $tb_valeurs, $cle);
}
$ok = $this->requete_sql($this->db, $cde);
return($ok);
}
// --- traduction d'un ou plusieurs mots
// l'argument mots peut contenir un ou plusieurs mots
function traduire($mots) {
// --- composition de la requete SQL
$champ = 'texte_' . $lang;
$cde = "select cle, $champ as texte from traductions
where cle in(";
for($i=0; $i<func_num_args(); $i++) {
$mot = func_get_arg($i);
if ($i > 0) $cde .= ',';
$cde .= "'$mot'";
}
$cde .= ')';
// --- recherche des traductions
$result = $this->requete_sql($cde);
while($row = mysql_fetch_object($result)) {
$GLOBALS["$row->cle"] = $row->texte;
}
return(mysql_num_rows($result));
}
// --- remplacement des variables dans un texte
function remplacement($texte, $tb_valeurs) {
reset($tb_valeurs);
while (list($cle, $valeur) = each($tb_valeurs)) {
$cle = '<' . $cle . '>';
$texte = str_replace($cle, $valeur, $texte);
}
return($texte);
}
function creation_fichier_langue ($fichier='', $langue='', $debug=0) {
if ($this->debug) {
echo "Traductions: Creation du fichier $fichier<br>";
}
// --- langue par défaut
if (strlen($langue) != 2) $langue = $this->langue;
// --- nom du fichier par défaut
if (!$fichier) {
$fichier = $this->rep_fichiers . 'traductions_' . $langue. '.php';
}
if ($fp = fopen($fichier, "w+") ) {
// --- debut du fichier
$txt = "<?\n\r";
// --- recherche des traductions dans la base
$champ = 'texte_' . $lang;
$cde = "select cle, $champ as texte from traductions
where langue like '$langue'";
// --- une ligne par traduction
$nb = 0;
while($row = mysql_fetch_object($result)) {
$txt .= '$' . $row->cle . '="'
. addslashes($row->texte)
. '";' . "\n\r";
$nb++;
}
// --- fin du fichier
$txt .= "?>\n\r";
// --- enregistrement
fputs ($fp, $txt);
fclose($fp);
}
if ($this->debug) {
echo "$nb traductions générées dans le fichier $fichier<br>";
}
// --- creation d'une requete d'insertion dans une table
function creation_requete_insertion(
$tbl, $tbinfos, $params='') {
if (!$tbl || !is_array($tbinfos) || count($tbinfos)==0) {
return('');
}
if (!is_array($params)) $params = array();
// --- tableau des champs existants dans la table
$tb_champs = $this->tb_champs($this->db, $tbl);
// --- creation des tableaux des champs et des valeurs
reset($tbinfos);
$txt_champs = '';
$txt_valeurs = '';
$i = 0;
while (list($cle, $valeur) = each($tbinfos)) {
// --- ajout dans la requete si le champ existe
if ($tb_champs["$cle"] == 1) {
if ($i >0) {
$txt_champs .= ',';
$txt_valeurs .= ',';
}
$txt_champs .= $cle;
$c = $this->quote_smart($valeur);
if (!is_numeric($valeur)) {
$txt_valeurs .= "'$c'";
}
else {
$txt_valeurs .= $c;
}
$i++;
}
}
// --- creation de la requete
if ($params['replace'] == 1) {
$requete = "replace into $tbl ($txt_champs)";
$requete .= " values ($txt_valeurs)";
}
else {
$requete = "insert into $tbl ($txt_champs)";
$requete .= " values ($txt_valeurs)";
}
return($requete);
}
// --- création d'une requête de modification dans une table
function creation_requete_modification($tbl,
$tbinfos, $id, $params='') {
$id = intval($id);
if (!$tbl
|| !is_array($tbinfos)
|| count($tbinfos)==0
|| !$id) {
return('');
}
if (!is_array($params)) $params = array();
// --- tableau des champs existants dans la table
$tb_champs = $this->tb_champs($this->db, $tbl);
// --- début de la requête
$txt_requete = "update $tbl";
// --- création des tableaux de champs et de valeurs
reset($tbinfos);
$i = 0;
while (list($cle, $valeur) = each($tbinfos)) {
// --- ajout dans la requête si le champ existe
if ($tb_champs["$cle"] == 1) {
if ($i == 0) {
$txt_requete .= ' set ';
}
else {
$txt_requete .= ',';
}
$valeur = $this->quote_smart($valeur);
$txt_requete .= "$cle='$valeur'";
$i++;
}
}
// --- clé primaire
if (strlen($params['cle_primaire']) > 0) {
$cle_primaire = $params['cle_primaire'];
}
else {
$cle_primaire = 'id';
}
// --- conditions
$txt_requete .= " where $cle_primaire=$id";
return($txt_requete);
}
// --- tableau des champs disponibles dans une table
function tb_champs($base, $table) {
$tb = array();
$result = mysql_list_fields($base, $table);
$n = mysql_num_fields($result);
for ($i=0; $i<$n; $i++) {
$name = mysql_field_name($result, $i);
$tb["$name"] = 1;
}
return($tb);
}
// --- fonction de protection d'une requête SQL
function quote_smart($valeur) {
if (phpversion() < "4.3.0") {
$valeur = addslashes($valeur);
}
else {
// --- stripslashes
if (get_magic_quotes_gpc()) {
$valeur = stripslashes($valeur);
}
// --- protection si ce n'est pas un entier
if (!is_numeric($valeur)) {
$valeur = mysql_real_escape_string($valeur);
}
}
return $valeur;
}
// --- fonction pour faire une requête SQL
function requete_sql($db, $cde) {
$db_selected = mysql_select_db($db, $this->db_link);
$result = mysql_query($cde, $this->db_link);
if (!$result) $this->display_mysql_error('requete_sql');
return($result);
}
// --- affichage des erreurs
function display_mysql_error($texte) {
if ($this->debug) {
echo "<b>$texte</b> erreur:";
echo mysql_error() . "<br>\n";
}
}
}
?>
|
|
|
 |
|