Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/05/2007, 15h26   #1
Membre du Club
 
Étudiant
Inscription : mars 2007
Messages : 198
Détails du profil
Informations personnelles :
Âge : 27

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mars 2007
Messages : 198
Points : 63
Points : 63
Envoyer un message via MSN à swissmade
Par défaut Site multi-langue PHP

Bonjours,
Je suis en train de créer un site sur lequel je voudrai mettre plusieur langue.
Je ne suis pas encore vraiment décidé a savoir comment je pourrai faire ca.
J'ai penser à faire une base de donnée "langue" qui aurrai la traduction de toute les langues. Puis dans mes pages mettre des vaiables qui pointerai vers ce tableau pour afficher le texte dans la bonne langue.

Que penser vous de ceci. y a t'il un moyen plus simple?

Merci d'avance de votre aide
swissmade est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2007, 15h30   #2
Membre expérimenté
 
Étudiant
Inscription : juillet 2004
Messages : 777
Détails du profil
Informations personnelles :
Âge : 25

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2004
Messages : 777
Points : 527
Points : 527
En generale ce qui est fait c'est avec un fichier qu'on inclus selon la langue demandé et qui contient les differents texte... Parce que sinon vla le nombre de requete que tu va faire...
cerede2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2007, 16h24   #3
Membre confirmé
 
Inscription : mai 2006
Messages : 196
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 196
Points : 278
Points : 278
Utilise le langage XML, en php tu as les fonction de simplexml qui permette d'extraire facilement les données avec simple_xpath. Une fois que tu connais bien le fonctionnement de l'XML et l'utiliser avec ces petites fonction tu pourra t'attaquer aux fonctions DOM qui permettent de manipuler les fichiers XML avec beaucoups plus de fonctions. Voici une classe que j'ai fait qui pourrais t'aider pour le debut $filelock n'est pas utilisé car je n'ai pas tout mis de la classe :o. Mais la fonction qui ressort les données est la.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
 
<?php
// Classe XMLManager
class XMLManager
{
	private $domfile;
	private $domxpath;
	private $curlang;
	private $curfile;
	private $filelock;
 
/*******************************************************************************************************************
METHODES PUBLIQUES
*******************************************************************************************************************/
 
	//Constructeur de la classe
	public function __construct( $filename, $language )
	{
		$this->curlang = $language;
		$this->curfile = $filename;
		$this->domfile = new DOMDocument('1.0', 'iso-8859-1');
		$this->domfile->preserveWhiteSpace = false; //On ne se soucie pas des espaces blancs.
		$this->filelock = fopen( $filename.'.checker','a+'); //Ouverture du fichier de sécurité.
		$this->domfile->load($filename);
 
		$this->domxpath = new DOMXPath($this->domfile);
	}
 
	//Destructeur de la classe
	public function __destruct()
	{
		unset($this->curfile);
		unset($this->domfile);
		unset($this->domxpath);
		unset($this->curlang);
		unset($this->filelock);
	}
 
	//Méthode qui retourne les données d'un noeud, l'élément pour la langue est inséré automatiquement.
	public function getXPath( $xpathquery )
	{
		$textnode = $this->domxpath->query( $xpathquery.'/'.$this->curlang );
		return utf8_decode($textnode->item(0)->nodeValue);
	}
}
Exemple du fichier XML :
Code XML :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?xml version="1.0" encoding="iso-8859-1"?>
<!--Elément racine //-->
<root>
	<title>
		<fr>Connexion à l''espace membre</fr>
                         <en></en>
	</title>
	<login>
		<fr>Login</fr>
	</login>
	<password>
		<fr>Mot de passe</fr>
	</password>
	<submit>
		<fr>Connexion</fr>
	</submit>
</root>

Pour ajouter une langue il suffit de remettre des balise <en> (EN ou ce que tu veut) avec le texte entre, l'objet s'occupe de la langue tout seul, utilise la classe comme ceci :
Code :
1
2
3
4
$xmllogform=new XMLManager( 'xml/website/logForm.xml', $_SESSION['Language'] );
echo $xmllogform->getXPath('//root/title'); /*Ceci affiche ce qui est dans la 
balise TITLE puis dans la balise FR ou EN selon la langue qui a servi à créer
l'objet.*/
Important : il faut bien penser à encodé en utf8_encode() avant d"écrire dans le fichier XML, et utiliser utf8_decode pour ressortir les données, sinon les accents risque de mal passer .
meliandah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2007, 16h41   #4
Membre expérimenté
 
Étudiant
Inscription : juillet 2004
Messages : 777
Détails du profil
Informations personnelles :
Âge : 25

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2004
Messages : 777
Points : 527
Points : 527
Bof je trouve pas que ca soit la meilleur methode...
cerede2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2007, 17h17   #5
Membre du Club
 
Étudiant
Inscription : mars 2007
Messages : 198
Détails du profil
Informations personnelles :
Âge : 27

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mars 2007
Messages : 198
Points : 63
Points : 63
Envoyer un message via MSN à swissmade
ok merci beaucoup d'avoir pris le temps de m'expliquer tout ca.
Je connai très peu (voire pas du tout en fait) le xml.
Mais je vais essayer d'étudier le sujet.
Je pense que c est ce qu il me fallai.

encore merci
swissmade est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2007, 19h46   #6
Inscrit
 
Avatar de is_null
 
Inscription : octobre 2006
Messages : 637
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 637
Points : 690
Points : 690
Surtout que SimpleXML offre des performances désastreuses dès que le fichier source commence à être important.

Personnelement je fais simplement un fichier dans lang/fr/home.php dans laquelle je déclare un tableau dont les valeurs sont en francais, et un fichier lang/en/home.php dans lequel est un tableau de valeurs en anglais.
Selon moi c'est la méthode la plus performante possible pour stocker les languages.
__________________
Q: Dois-je haïr et cogner sur Microsoft ?
R: Non, vous n'êtes pas obligé. Non pas que Microsoft n'est pas écoeurant, mais il y avait une culture hacker bien avant Microsoft et il y en aura une bien après que Microsoft aura été de l'histoire ancienne. Toute énergie dépensée à haïr Microsoft serait mieux employée par vos compétences et votre passion. Écrivez du bon code, cela brisera suffisamment Microsoft sans polluer votre karma.
Comment devenir un hacker ? par Eric Steven Raymond
is_null est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/05/2007, 02h35   #7
Membre confirmé
 
Inscription : mai 2006
Messages : 196
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 196
Points : 278
Points : 278
Justement moi j'évite de faire des fichiers important mais j'utilise DOM personnellement maintenant c'est vrai que dupliquer le site c'est pas mal mais si tu augmente le nombre de langue et que la structure du site s'agrandi, les updates deviennent durs :s mais tout dépend de la taille et langues souhaitées
meliandah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/05/2007, 10h15   #8
Membre du Club
 
Étudiant
Inscription : mars 2007
Messages : 198
Détails du profil
Informations personnelles :
Âge : 27

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mars 2007
Messages : 198
Points : 63
Points : 63
Envoyer un message via MSN à swissmade
il n'y a donc pas vraiment de solution miracle que tous les webmaster utilisent?

Pour ta proposition is_null si j'ai bien compris je met des variable dans ma page.php et je fait un include de lang/fr/page.php avec un tableau de toutes les variables dont j'ai besoin dans page.php et ceci pour toute les langues?!
swissmade est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/05/2007, 10h18   #9
Membre chevronné
 
Avatar de Korko Fain
 
Étudiant
Inscription : août 2005
Messages : 632
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2005
Messages : 632
Points : 632
Points : 632
En général oui c'est assez utilisé le fichier /lang/__un_indentifiant_de_la_langue__/lang.php

avec dedans
Code :
1
2
3
4
5
6
7
<?php
 
$lang = array (
'toto' => 'Je m\'appel toto et je suis un texte de langue',
);
 
?>
Korko Fain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/05/2007, 10h24   #10
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
Je suis assez d'accord avec ce genre de propositions
Citation:
Envoyé par Korko Fain
En général oui c'est assez utilisé le fichier /lang/__un_indentifiant_de_la_langue__/lang.php

avec dedans
Code :
1
2
3
4
5
6
7
<?php
 
$lang = array (
'toto' => 'Je m\'appel toto et je suis un texte de langue',
);
 
?>
J'utilise un fichier lang.php qui contient ca :
Code :
1
2
3
4
5
6
7
8
9
10
11
 
define ('IHM_LANGUAGE',	"french" );	///< Active Language
if(file_exists( dirname(__FILE__) . '/' . IHM_LANGUAGE . '.php' ))
   {
   require_once( dirname(__FILE__) . '/' . IHM_LANGUAGE . '.php' );
   }
else 
   {
   echo "No language file found.";
   exit;
   }
Et ensuite a coté j'ai mes différents fichiers french.php, english.php etc qui contiennent toutes mes chaines traduites par exemple :

Code :
1
2
3
4
5
6
7
8
9
 
// php date format
define ('DATE_FORMAT_SHORT', 		'd/m/Y'	);
 
// Define Months
$gMonth[1]	= "Janvier";
$gMonth[2]	= "Février";
$gMonth[3]	= "Mars";
//etc.
et dans mon code, j'inclus simplement le fichier lang.php qui se chargera de choisir le fichier de langue spécifié, mes scripts sont alors indépendants de la langue.
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/05/2007, 12h27   #11
Membre confirmé
 
Inscription : mai 2006
Messages : 196
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 196
Points : 278
Points : 278
C'est pas mal mais si le site est très gros et qu'il y a beaucoups d'utilisateurs la mémoire des serveurs sera vite remplies avec des tableaux donc il te faudra plus de serveurs ^^. Mais tout dépend de ce que l'ont souhaite faire :o chaque méthodes à des avantages et inconvénients à peser, multiplier le nombre de pages par les langues peut être plus simple à la conception, une mise à jour plus longue mais peut être plus simple à première vue, mais beaucoup de tableaux en PHP rempliront rapidement la mémoire, le XML lui aura beaucoup d'accés disque s'il y a beaucoup d'utilisateur, mais il pourra en supporter plus mais avec des temps de chargement un peu plus long en heure de pointe je pense.

Il faut bien penser à ce que l'ont veut au final avant même de commencer
meliandah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/05/2007, 12h27   #12
En attente de confirmation mail
 
Inscription : octobre 2002
Messages : 347
Détails du profil
Informations forums :
Inscription : octobre 2002
Messages : 347
Points : 94
Points : 94
Par défaut ok

Bonjour,

je ne pense abosulment pas que la solution d'avoir une table (id,libelle,lang) reliée à chaque table ayant un champ à traduire soit une bonne solution.

c'est même critique dans le cas d'un gros volume de données à traduire ou déjà traduites ou en 4 langues même !.
si ta table n'a qu'un champ à traduire, tu vas devoir la jointurer à une autre table de 50000 tuples rien que pour en obtenir qu'un seul !
le serveur WEB va vite saturer (en rapidité)..
Ekimasu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/05/2007, 14h36   #13
En attente de confirmation mail
 
Inscription : octobre 2002
Messages : 347
Détails du profil
Informations forums :
Inscription : octobre 2002
Messages : 347
Points : 94
Points : 94
Par défaut ok

Re,

je reviens sur la solution XML que j'ai vu plus haut. Je pense qu'elle très bonne informatiquement parlant mais je pense qu'elle est trop couteuse en ressource.
L'utilisation des fonctions XML est lourde (quel soit le langage d'ailleur) à cause du parser (qui fait un travail énorme et long pour vérifier la structure xml..histoire d'arbres.....).

Voilà ma solution :

tu fais un fichier dictionnaire ainsi genre pour le français :

dico_fr.inc.php
Code :
1
2
3
4
5
6
7
8
9
10
11
 
<?PHP
 
	$trad[0]="Utilisateur:";
	$trad[1]="Mot de passe:";
	$trad[2]="Ok";
	$trad[3]="S'inscrire";
	$trad[4]="S'incrire et obtenir un compte utilisateur pour Gaara";
	$trad[5]="Rechercher...";
	$trad[6]="{Faire un choix}";
?>
comme tu auras plusieurs fichiers (genre dico_en.inc.php , dico_it.inc.php , dico_de.inc.php) alors appeleras ton dico ainsi :
Code :
include_once("dico_$LANG.inc.php");
où $LANG est un code de langue.

Dans ton côté view PHP/HTML, tu écris donc tes champs en accolade ainsi, par exemple un header :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
<?PHP
//captation de la page pour la traduction
$PAGE=ob_start();
?><hr>
<form action="auth.php" method="post" enctype="multipart/form-data" name="FORMU" id="FORMU">
  {trad_0}
  <input type="text" name="TXT_LOGIN" id="TXT_LOGIN" tabindex="1"> 
  {trad_1}
  <input type="text" name="TXT_PASSWORD" id="TXT_PASSWORD" tabindex="2" >
  <input type="submit" name="btn_ok" id="btn_ok" value="{trad_2}" tabindex="3" > 
  <a href="submit.php" title="{trad_4}">{trad_3}</a> <a href="<?PHP echo $ICI.'?LANG=fr';?>">FR</a> | <a href="<?PHP echo $ICI.'?LANG=en'; ?>">EN</a> | <a href="<?PHP echo $ICI.'?LANG=cn';?>">CN</a> 
</form>
<hr>
<form action="search.php" method="post" enctype="multipart/form-data" name="FORMU2" id="FORMU2">
  <input name="TXT_SEARCH" type="text" id="TXT_SEARCH" value="{trad_5}" tabindex="5" >
  <input type="submit" name="btn_ok2" id="btn_ok2" value="{trad_2}" tabindex="6" >
</form>
<hr>
et à la fin, tu places un truc comme ça dans un require_once :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?PHP
	// on récupère le flux HTML
	$PAGE= ob_get_contents ();
 
	// on vide le cache du flux
	ob_end_clean();
 
	// on traduit
	$nb=count($trad);
	$tab_apres=$trad;
	$tab_avant= array();
 
	for ($i=0;$i<$nb;$i++)
		{		
		$tab_avant[] = "{trad_".$i."}";
		}
 
 
	// on effectue la traducion en remplacant
    @$PAGE = str_replace($tab_avant, $tab_apres, $PAGE);
	//on affiche la page traduite
	echo $PAGE;
 
 
?>
je trouve cette solution extrement simple à gérer.
elle peut même être améliorée en cherchant/remplacant uniquement les chaines {trad_XX} grâce à une expression régulière...Bref ce principe est le même que l'URL rewriting...
En plus ça n'encombre pas ton HTML avec des phrases de 4 lignes qui nuisent à ta visiblilité des TAG.


qu'en pensez-vous ?
Ekimasu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/05/2007, 14h57   #14
Membre confirmé
 
Inscription : mai 2006
Messages : 196
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 196
Points : 278
Points : 278
Cela reviens au même tu remplira beaucoup de tableau en PHP et saturera la mémoire. L'XML est un moteur conçu spécialement pour faire ce qu'il fait, et j'ai déjà examiner des fichiers XML de plus de 32 000 entrées et sa prend 2 à 3 secondes sur des bécanes normale pour charger, remplir un tableau de 32 000 index, je crois pas que PHP y arrivera, il te sortira surement une erreur avant (alors que tu es seul à utiliser le serveur, alors imagine si 500 personnes ou plus vienne sur le site en même temps). XML est conçu pour sa :o autant l'utiliser, on peut même créer un générateur de page avec les fonctions DOM :o une page HTML n'est rien d'autre qu'un document XML avec comme élement racine une balise HTML, qui en contient 2 : HEAD et BODY. Tu gère les attributs et nodeValue(le texte dans la balise) et tu génére des page HTML et tu peut même les sauver
meliandah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/05/2007, 16h15   #15
Membre expérimenté
 
Étudiant
Inscription : juillet 2004
Messages : 777
Détails du profil
Informations personnelles :
Âge : 25

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2004
Messages : 777
Points : 527
Points : 527
Citation:
Envoyé par meliandah
Cela reviens au même tu remplira beaucoup de tableau en PHP et saturera la mémoire. L'XML est un moteur conçu spécialement pour faire ce qu'il fait, et j'ai déjà examiner des fichiers XML de plus de 32 000 entrées et sa prend 2 à 3 secondes sur des bécanes normale pour charger
Alors la pas du tout d'accord le temps de traitement d'un XML est long, meme tres long des fois... Ayant fait des parseurs je sait de quoi de parle...
Et pour traité 32 000 entrée ca ne prend pas 2 a 3 sec
cerede2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/05/2007, 16h26   #16
Membre confirmé
 
Inscription : mai 2006
Messages : 196
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 196
Points : 278
Points : 278
Sa dépend du traitement, moi c'était pour ressortir tous les noms, sous linux avec des petits pross ( < 2Ghz), il mettait 2-3 secondes avant de lancer l'affichage de tous les noms :o, après selon les éléments et le traitement c'est clair que sa mettera plus de temps. Aussi je ne met pas tout dans un seul fichier XML, après tu t'y perd dans les noms des balises.
meliandah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/05/2007, 19h07   #17
Membre chevronné
 
Avatar de Korko Fain
 
Étudiant
Inscription : août 2005
Messages : 632
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2005
Messages : 632
Points : 632
Points : 632
Et avant d'avoir un truc de 32000 clef de langue, c'est pu un site c'est un monstre :p
Korko Fain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2007, 09h19   #18
En attente de confirmation mail
 
Inscription : octobre 2002
Messages : 347
Détails du profil
Informations forums :
Inscription : octobre 2002
Messages : 347
Points : 94
Points : 94
oui c'est vrai le XML prend du temps.
imaginez 10000 visiteurs qui font ce traitement de traduction....
pauvre serveur.

j'ai pensé aussi à externaliser la traduction sur le client : un fichier javascript qui contiendra le tableau et fera le remplacement.
le côté client monovisiteur sera plus apte a faire ça que le serveur en multivisiteur-connexion.
Ekimasu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2007, 11h36   #19
Inscrit
 
Avatar de is_null
 
Inscription : octobre 2006
Messages : 637
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 637
Points : 690
Points : 690
Super idée à part pour le référencement.
__________________
Q: Dois-je haïr et cogner sur Microsoft ?
R: Non, vous n'êtes pas obligé. Non pas que Microsoft n'est pas écoeurant, mais il y avait une culture hacker bien avant Microsoft et il y en aura une bien après que Microsoft aura été de l'histoire ancienne. Toute énergie dépensée à haïr Microsoft serait mieux employée par vos compétences et votre passion. Écrivez du bon code, cela brisera suffisamment Microsoft sans polluer votre karma.
Comment devenir un hacker ? par Eric Steven Raymond
is_null est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2007, 16h00   #20
En attente de confirmation mail
 
Inscription : octobre 2002
Messages : 347
Détails du profil
Informations forums :
Inscription : octobre 2002
Messages : 347
Points : 94
Points : 94
Par défaut ok

Citation:
Envoyé par is_null
Super idée à part pour le référencement.
non c'est pas une gene pour le référencement.
il suffit de faire une page catalogue ou Sitemap basées sur ces fichiers javascript et le tour est joué.
Ekimasu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h57.


 
 
 
 
Partenaires

Hébergement Web