Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CLASSE PHP PERMETANT DE GERER LE MULTILANGUES


Information sur la source

Catégorie :Class et Objet ( POO ) Classé sous : class, langue, traduire, traduction Niveau : Débutant Date de création : 31/05/2007 Date de mise à jour : 31/05/2007 23:18:42 Vu : 4 987

Note :
Aucune note

Commentaire sur cette source (12)
Ajouter un commentaire et/ou une note

Description

Bonjour,

Comme expliqué dans le titre cette classe php permet de gerer le multi-langues.
On peut avec cette classe soit appeler l'objet et ainsi obtenir l'information dans la langue, soit on génère le fichier et on utilise les constantes générées.

Ceci est ma première source sur le site. Merci d'être indulgent.

Je reste a votre disposition pour toute amélioration.

 

Source

  • <?php
  • class MultiLangue{
  • var $tabLangue;
  • // Tableau qui contiendra toutes les langues a 1 dimension [FR|EN|..]
  • var $nbLangue;
  • // Savoir combien de langue sont enregistré
  • var $tabMotADefinir;
  • var $nbMotADefinir;
  • //
  • var $tabTraduction;
  • function MultiLangue(){
  • $this->nbLangue = 0;
  • $this->nbMotADefinir = 0;
  • }
  • function ajouterLangue($nomCourtLangue = "FR"){
  • $this->tabLangue[$this->nbLangue] = $nomCourtLangue;
  • $this->nbLangue++;
  • }
  • function trouverLangue($nomCourtLangue){
  • //Retourne le rang de la langue
  • $trouve = false;
  • $i=0;
  • while($i<$this->nbLangue && $trouve==false){
  • if($this->tabLangue[$i]==$nomCourtLangue){
  • $trouve=true;
  • }else{
  • $i++;
  • }
  • }
  • if($trouve==false) $i = 0;
  • return $i;
  • }
  • function ajouterMotADefinir($motADefinir){
  • $this->tabMotADefinir[$this->nbMotADefinir] = $motADefinir;
  • $this->nbMotADefinir++;
  • }
  • function existeLangue($langue)
  • {
  • //Savoir si la langue existe ou pas
  • $trouve = false;
  • $i=0;
  • while($i<$this->nbLangue && $trouve==false){
  • if($this->tabLangue[$i]==$langue){
  • $trouve=true;
  • }else{
  • $i++;
  • }
  • }
  • return $trouve;
  • }
  • function existeMotADefinir($mot)
  • {
  • //Retourne le rang de la langue
  • $trouve = false;
  • $i=0;
  • while($i<$this->nbMotADefinir && $trouve==false){
  • if($this->tabMotADefinir[$i]==$mot){
  • $trouve=true;
  • }else{
  • $i++;
  • }
  • }
  • return $trouve;
  • }
  • function trouverMotADefinir($motADefinir){
  • //Retourne le rang de la langue
  • $trouve = false;
  • $i=0;
  • while($i<$this->nbMotADefinir && $trouve==false){
  • if($this->tabMotADefinir[$i]==$motADefinir){
  • $trouve=true;
  • }else{
  • $i++;
  • }
  • }
  • if($trouve==false) $i = 0;
  • return $i;
  • }
  • function ajouterMotALangue($MotADefinir, $nomCourtLangue, $Traduction)
  • {
  • if($this->existeLangue($nomCourtLangue)==false){
  • $this->ajouterLangue($nomCourtLangue);
  • }
  • if($this->existeMotADefinir($MotADefinir)==false){
  • $this->ajouterMotADefinir($MotADefinir);
  • }
  • $this->tabTraduction[$this->trouverMotADefinir($MotADefinir)][$this->trouverLangue($nomCourtLangue)] = $Traduction;
  • }
  • function affiche($langue, $MotDefini){
  • return $this->tabTraduction[$this->trouverMotADefinir($MotDefini)][$this->trouverLangue($langue)];
  • }
  • function creerFichierLangue(){
  • $fp=fopen("langues.php","w");
  • fwrite($fp,'<?php');
  • fwrite($fp,"\n\n");
  • $i = 0;
  • $j = 0;
  • do{
  • fwrite($fp,'define("'. $this->tabLangue[$i] . '_' . $this->tabMotADefinir[$j] .'","'. $this->tabTraduction[$j][$i] .'");');
  • fwrite($fp,"\n");
  • $i++;
  • if($i==$this->nbLangue){
  • $i=0;
  • $j++;
  • }
  • }while($i<$this->nbLangue && $j<$this->nbMotADefinir);
  • fwrite($fp,"\n");
  • fwrite($fp,'?>');
  • fclose($fp);
  • }
  • }
  • ?>
<?php
class MultiLangue{
	
	var $tabLangue;
	// Tableau qui contiendra toutes les langues a 1 dimension [FR|EN|..]
	var $nbLangue;
	// Savoir combien de langue sont enregistré
	var $tabMotADefinir;
	var $nbMotADefinir;
	// 
	var $tabTraduction;
	
	function MultiLangue(){
		$this->nbLangue = 0;
		$this->nbMotADefinir = 0;
	}
	
	function ajouterLangue($nomCourtLangue = "FR"){
		$this->tabLangue[$this->nbLangue] = $nomCourtLangue;
		$this->nbLangue++;
	}
	
	function trouverLangue($nomCourtLangue){
		//Retourne le rang de la langue
		$trouve = false;
		$i=0;
		while($i<$this->nbLangue && $trouve==false){
			if($this->tabLangue[$i]==$nomCourtLangue){
				$trouve=true;
			}else{
				$i++;	
			}
		}
		if($trouve==false) $i = 0;
		return $i;
	}
	
	function ajouterMotADefinir($motADefinir){
		$this->tabMotADefinir[$this->nbMotADefinir] = $motADefinir;
		$this->nbMotADefinir++;
	}
	
	function existeLangue($langue)
	{
		//Savoir si la langue existe ou pas
		$trouve = false;
		$i=0;
		while($i<$this->nbLangue && $trouve==false){
			if($this->tabLangue[$i]==$langue){
				$trouve=true;
			}else{
				$i++;
			}
		}
		return $trouve;
	}
	
	function existeMotADefinir($mot)
	{
		//Retourne le rang de la langue
		$trouve = false;
		$i=0;
		while($i<$this->nbMotADefinir && $trouve==false){
			if($this->tabMotADefinir[$i]==$mot){
				$trouve=true;
			}else{
				$i++;	
			}
		}
		return $trouve;
	}
	
	function trouverMotADefinir($motADefinir){
		//Retourne le rang de la langue
		$trouve = false;
		$i=0;
		while($i<$this->nbMotADefinir && $trouve==false){
			if($this->tabMotADefinir[$i]==$motADefinir){
				$trouve=true;
			}else{
				$i++;	
			}
		}
		if($trouve==false) $i = 0;
		return $i;
	}
	
	function ajouterMotALangue($MotADefinir, $nomCourtLangue, $Traduction)
	{
		if($this->existeLangue($nomCourtLangue)==false){
			$this->ajouterLangue($nomCourtLangue);	
		}
		if($this->existeMotADefinir($MotADefinir)==false){
			$this->ajouterMotADefinir($MotADefinir);				
		}
		$this->tabTraduction[$this->trouverMotADefinir($MotADefinir)][$this->trouverLangue($nomCourtLangue)] = $Traduction;
	}
	
	function affiche($langue, $MotDefini){
		return $this->tabTraduction[$this->trouverMotADefinir($MotDefini)][$this->trouverLangue($langue)];
	}
	
	function creerFichierLangue(){
		$fp=fopen("langues.php","w");
		fwrite($fp,'<?php');
		fwrite($fp,"\n\n");
		$i = 0;
		$j = 0;
		do{
			fwrite($fp,'define("'. $this->tabLangue[$i] . '_' . $this->tabMotADefinir[$j] .'","'. $this->tabTraduction[$j][$i] .'");');
			fwrite($fp,"\n");
			$i++;
			if($i==$this->nbLangue){
			$i=0;
			$j++;	
			}
		}while($i<$this->nbLangue && $j<$this->nbMotADefinir);
		fwrite($fp,"\n");
		fwrite($fp,'?>');
		fclose($fp);
	}
	
}

?>

Conclusion

Voila maintenant son appel :

$test = new MultiLangue();

$test->ajouterMotALangue("BIENVENUE", "FR", "Bienvenue sur le site test ");
$test->ajouterMotALangue("ADIEU", "EN", "BUH BYE ");
$test->ajouterMotALangue("ADIEU", "FR", "Au Revoir et a bientôt ");
$test->ajouterMotALangue("BIENVENUE", "EN", "Welcome on this WEBSITE ");
echo $test->affiche("FR","BIENVENUE");
echo $test->affiche("FR","ADIEU");
echo $test->affiche("EN","BIENVENUE");
// Si l'on souhaite générer le fchier ...
$test->creerFichierLangue();
 

Historique

31 mai 2007 23:18:43 :
La mise a jour concerne simplement le niveau de cette source peut etre s'adresse t-elle plus au débutant !!! Je la met à jour pour la rendre plus complète avec du PHP5 Bon courage

Commentaires et avis

signaler à un administrateur
Commentaire de phppro le 31/05/2007 21:45:03

N'hésitez pas à laisser vos commentaire sur cette source.

Je suis preneur ...

Merci aussi de notez la source sa me fera très plaisir même si elle est mauvaise.

Cordialement

phppro

signaler à un administrateur
Commentaire de coucou747 le 31/05/2007 22:30:31

en gros, ta source cres le fichier multilangue, mais faut saisir le contenu de toute facon... donc ou est l'interet ? En general, on code une classe qui gere la lecture d'un xml, la selection de la langue par rapport au infos que donne le navigateur, et qui gere l'affichage d'une chaine en fonction d'une langue et d'une clef...

si par malheur t'as un caractere qui comporte ", alors ton script ne marche plus

signaler à un administrateur
Commentaire de neigedhiver le 31/05/2007 22:50:09

Salut,

Alors que je regardais le fonctionnement de chaque méthode, je me suis arrêté direct sur existeLangue()
Tu fais un truc bien compliqué alors qu'il existe une fonction php qui donne directement la clé selon la valeur : c'est array_search()
=> http://ch2.php.net/manual/fr/function.array-search.php
Du coup, je constate que tu utilises le même procédé pour d'autres méthodes => y'a de quoi optimiser de ce côté là.

Sinon, la méthode qui génère le fichier de langue présuppose qu'on utilise des constantes, et c'est peut-être un peu dommage... Par exemple, moi, j'utilise un tableau à deux dimensions. Certains utilisent des tableaux à 3 dimensions, la première étant la catégorie, la seconde l'expression à traduire.
Peut-être qu'il faudrait une classe d'abstraction (ouais, c'est du php5... mais j'y reviens après) qui génère un fichier de langue, dans le format qu'on veut (grâce à une classe concrète).

Par ailleurs, je trouve dommage que cette classe soit en php4. C'est pas grand chose, elle ne nécessite pas, en l'état actuel, les possibilités de php5, mais justement, l'exemple que je donne dans le paragraphe précédent pourrait être une, à mon sens, une idée d'amélioration.

Et pour finir, je pense qu'il est rare qu'on utilise plusieurs langues sur un même site (sauf cas particuliers).
J'aurais plutôt opté pour utiliser une langue par défaut. Pour afficher un mot, j'aurais mis la langue comme paramètre optionnel : si non spécifié, langue par défaut, sinon, langue spécifiée.

signaler à un administrateur
Commentaire de phppro le 31/05/2007 22:51:38

En effet cette source construit aussi le fichier multilangue. Ce n'est pas tout en effet tu peux aussi l'utiliser en mode objet de façon simple. En fait le fichier fait office de sauvegarde (même si ce n'en est pas un....). Je suis en train de compléter cette source pour charger le fichier et ainsi remplir l'objet.


Par contre je ne comprend pas pourquoi le caractère guillemet me fait sauter le script ???

J'ai penser que cette source s'adressait avant tout aux développeurs ...  

Merci de m'expliquer pour que je puisse améliorer cette source.

signaler à un administrateur
Commentaire de coucou747 le 31/05/2007 22:56:37

essai ca :
$test->ajouterMotALangue("test", "FR", '"');
ton fichier ne marchera plus

signaler à un administrateur
Commentaire de neigedhiver le 31/05/2007 22:58:23

En gros, il manque l'échappement des guillemets... add_slashes() par exemple.

signaler à un administrateur
Commentaire de phppro le 31/05/2007 22:58:59

Merci pour vos commentaires j'ai bien noté le fait que ma classe était a améliorer.

En tout cas merci pour la fonction array_search() que je ne connaissait pas. Je vais donc me remettre au travail.


Merci pour tout sa fait super plaisir

Je met à jour la source dès que je l'ai fait.

signaler à un administrateur
Commentaire de neigedhiver le 31/05/2007 23:04:59

J'avais en tête une classe pour gérer le multilangue...

Selon moi, il manque :
- import d'un fichier de langue (tableau php, constantes ou fichier xml, ou ini, ou autre standard)
- des fonctionnalités liées à la localisation : heure, direction, encodage des caractères, etc

Je sais pas exactement comment je verrais ça. Une chose est sûre, php4, c'est quand même super limité comparé à php5...

* Une classe abstraite qui lit un fichier de langue, avec plusieurs classes concrètes dérivées suivant le format lu
* Une classe abstraite qui écrit le fichier de langue, avec, pareil, des classes concrètes. L'utilisation de l'une puis de l'autre permettrait de faire un outil de conversion sans le développer, quasiment...
* Une classe qui gère l'affichage des expressions, la langue utilisée, etc

Ce serait une base...

signaler à un administrateur
Commentaire de kankrelune le 01/06/2007 14:25:04

Moi j'opterais plutôt pour une collection d'objet à la place de l'abstraction... tu charge à la volé une classe dédié à écrire/lire une type de fichier cette dernière implémentant une interface définissant les méthodes dont tu as besoin... .. .

@ tchaOo°





signaler à un administrateur
Commentaire de garfield90 le 15/06/2007 16:23:56

@neigedhiver : dans le Zend Framework, t'as tout une serie de classe permettant de gérer ca, manque à coder un systeme permettant de créer/modifier les fichiers, si j'ai le temps, je ferai une ébauche ou le tout

signaler à un administrateur
Commentaire de coucou747 le 15/06/2007 16:26:13

tu sais, c'est pas parce-qu'un truc existe qu'on a pas le droit de le recoder...

signaler à un administrateur
Commentaire de garfield90 le 15/06/2007 16:42:23

J'ai jamais dis ca, après c'est une question de contrainte et d'envie ;)

C'est pour ca qu'il y a X codes similaires sur ce site.

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Multi langue [ par panpan ] Hello,Je suis en train de concevoir un site en plusieurs langues mais j'ai un problème pour un chose:J'ai défini toute mes traduction dans les fichier Problem d'affichage de resultat de requete sous forme de tableau [ par jbcaiz ] explication : je fais un requete de recherche dans ma base, qui doit normalement me sortir plusieur résultat.je veux que ces résultat s'affiche dans u Serveur SMTP [ par Marion0904 ] Bonsoir, J'essai d'nvoyer des mails en utilisant la class phpmailer (disponible sur&nbsp; http://phpmailer.sourceforge.net/). J'incu la class php mail schéma de base de données traduction [ par rbh ] Bonjourj'ai un un petit soucis dans le conception du sch&#233;ma de la base de donn&#233;escorrespondnat &#224; la probl&#233;matique suivante: il s'a templates avec poo [ par lesnes ] bonjours je reprogramme totalement mon site en poo et je souhaiterai utiliser les templates mais l'on ne peut pas faire appel a une class exterieur a Petit probléme pointu [ par sky_striker ] Bonjour &#224; tous,Voila j'ai un script qui effectu une boucle et qui ajoute des traduction pour un certain texte (on simplifie pour l'explication). C'est long, mais simple :o) [ par nougitch ] Bonjour, Je travaille sur la RFC 1766 qui associe le code d'une langue &#224; celui d'un pays (c'est une association des normes ISO 639-1 et 3166-1 a pb avec le multilangue [ par morpheus262 ] Salut,pour une fois c'est &nbsp;moi qui ai un probleme avec mon code, erreur assez bizard car j ai deja utilis&#233; ce principe et ca marche tres bie pfff j'arrive pas à traduire ce petit code ASP en PHP [ par louloudelom ] Bonjour &#224; tous,je dois traduire un code d'ASP en PHP et je n'y comprends rien....c'est un code pour d'indentification de l'utilisateur (sans mot Requête Multitable [ par ripoux ] Bonjour,J'ai un soucis au niveau des requ&#234;tes multitable en MySQL...Voila ce que j'aimerais faire:J'ai une table de "question" et un table de "r&


Nos sponsors

Sondage...

CalendriCode

Octobre 2008
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,48 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.