Classe php permetant de gerer le multilangues

Soyez le premier à donner votre avis sur cette source.

Snippet vu 9 453 fois - Téléchargée 19 fois

Contenu du snippet

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 / Exemple :


<?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();

A voir également

Ajouter un commentaire

Commentaires

cs_garfield90
Messages postés
388
Date d'inscription
lundi 7 juillet 2003
Statut
Webmaster
Dernière intervention
10 février 2009
-
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.
coucou747
Messages postés
12336
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
30 -
tu sais, c'est pas parce-qu'un truc existe qu'on a pas le droit de le recoder...
cs_garfield90
Messages postés
388
Date d'inscription
lundi 7 juillet 2003
Statut
Webmaster
Dernière intervention
10 février 2009
-
@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
kankrelune
Messages postés
1293
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
21 mai 2015
-
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°
neigedhiver
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
13 -
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...

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.