Bonjour, tu pourrais faire comme ceci:
<?php
header( 'content-type: text/html; charset=utf-8' );
function findLocale ($loc = '', $block = 'notext', $page="default") { // fonction allant chercher la traduction d'un bloc donné dans le fichier xml de localisation. Prend en paramètre la langue à utiliser, et l'élément contenant le texte. L'élément a pour le nom l'ID du block où on va afficher le texte
if ($loc === '') { // si loc n'existe pas
$loc = $_SESSION['locale']; // on lui assigne la variable de session
}
$file = $page.'.xml';
// tests de validité du fichier etc...
$doc = simplexml_load_file ($file); // on charge le fichier de localisation
$resultat = $doc ->xpath ($loc.'/'.$block); // on va chercher le noeud correct
if (!empty ($resultat)) { // si le tableau n'est pas vide, il y a un texte
foreach ($resultat as $noeud) {
utf8_encode($noeud );
return $noeud; // on renvoie ce texte
}
}
else {
$resultat = $doc ->xpath ($loc.'/notext'); // sinon on va chercher le message d'erreur
foreach ($resultat as $noeud) {
$noeud= utf8_encode($noeud);
return $noeud;
}
}
}
et tu l'utiliserais comme ça:
<?php
echo findLocale ($_SESSION['locale'], 'titre1');
echo findLocale ($_SESSION['locale'], 'titre1','page_contact');
echo findLocale ($_SESSION['locale'], 'titre1','page_livredor');
?>
Après j'ajoute une chose, tu pourrais aussi séparer le contenu de tes fichiers xml par langue... (c'est ce que fait gettext)
Donc tu aurais une architecture comme ceci:
Code : Tout sélectionner
/locale
/FRANCAIS
contact.xml
livredor.xml
index.xml
/ENGLISH
contact.xml
livredor.xml
index.xml
et donc ta fonction deviendrais plus ou moins:
<?php
function findLocale ($loc = '', $block = 'notext', $page="default") { // fonction allant chercher la traduction d'un bloc donné dans le fichier xml de localisation. Prend en paramètre la langue à utiliser, et l'élément contenant le texte. L'élément a pour le nom l'ID du block où on va afficher le texte
if ($loc === '') { // si loc n'existe pas
$loc = $_SESSION['locale']; // on lui assigne la variable de session
}
$file = $loc.'/'.$page.'.xml';
// tests de validité du fichier etc...
$doc = simplexml_load_file ($file); // on charge le fichier de localisation
$resultat = $doc ->xpath ('/'.$block); // on va chercher le noeud correct
if (!empty ($resultat)) { // si le tableau n'est pas vide, il y a un texte
foreach ($resultat as $noeud) {
utf8_encode($noeud );
return $noeud; // on renvoie ce texte
}
}
else {
$resultat = $doc ->xpath ('/notext'); // sinon on va chercher le message d'erreur
foreach ($resultat as $noeud) {
$noeud= utf8_encode($noeud);
return $noeud;
}
}
}
Et une dernière chose,
pourquoi utilises-tu utf8_decode() ? visiblement ton xml est en iso... mais tes sources en utf8? il y a un manque de cohérence
