Site Multilingue

Anya
Invité n'ayant pas de compte PHPfrance

26 juil. 2006, 09:38

Bonjour,
je suis plus que débutante en PHP, et j'aimerais diviser mon site en 2 langues : Anglais & Français.
J'ai déjà regardé plusieurs tuto (dont celui sur phpdébutant), mais je n'arrive pas à saisir les bases mêmes.
J'ai réussi à faire l'exercice du tuto, ça fonctionne, mais je ne comprend toujours pas : le php doit facilier les choses, mais si j'ai bien compris je dois tout traduire mon site quand même ? Alors pourquoi ne pas tout faire en html et placer mes fichiers dans des sous répertoires ?
En clair je n'arrive pas à appliquer le tuto à mon propre cas...

Si quelqu'un a un bon tuto, script ou quelques minutes pour m'expliquer ne serait ce que les bases, ça serait sympa, merci d'avance.

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

26 juil. 2006, 10:10

le php doit facilier les choses, mais si j'ai bien compris je dois tout traduire mon site quand même ?
Ah ben ça c'est sûr, le PHP ne va pas te faire les traductions :lol:

Le PHP facilite les choses dans le sens que tu va pouvoir stocker à part les textes en différente langues, et les insérer suivant un profil utilisateur par exemple. Tu as donc la même structure de site pour tous, les mêmes requêtes SQL, les mêmes images, les mêmes pages, seuls les textes changent.
Ainsi tu peux facilement proposer une nouvelle langue par exemple, sans refaire toutes les pages, et inversement changer la maquette sans toucher aux textes.
Alors pourquoi ne pas tout faire en html et placer mes fichiers dans des sous répertoires ?
Parceque qu'avec cette méthode tu devrais avoir plusieurs fois les mêmes fichiers, HTML inclus. Si tu as un site en 3 langues, et qu'un jour tu veux changer un truc dans ta page (mettre un logo ou je ne sais quoi), il faudrait que tu le fasses 3 fois...

Anya
Invité n'ayant pas de compte PHPfrance

26 juil. 2006, 10:15

D'accord. Merci pour ces précisions.

Donc en fait, j'aurais du php dans toutes mes pages, avec des variables, au lieu du texte habituel ; et les textes, le contenu habituel, sera à part dans des pages non mise en forme ?

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

26 juil. 2006, 10:19

En gros oui

Structure de la page --> HTML
Mise en forme --> CSS
PHP --> textes (variables insérées) et trucs dynamiques (calculs, requêtes SQL...)

Ainsi tu as déjà une bonne structure qui sépare les différents éléments et te permet de maintenir tout ça facilement
Après la gestion des textes tu peux faire ça comme tu veux : base de données, fichiers... je crois que c'est bien expliqué dans les tutos

Eléphant du PHP | 177 Messages

26 juil. 2006, 10:27

Tu as switch qui est pratique pour cela

<?php
//au prealable tu définit via un from le choix de la langue
// français=0 anglais=1 espagnol=2
switch ($lang) {
    case 0:
        print "Salut";
    case 1:
        print "Hi";
    case 2:
        print "Ola";
}
?>
Il y a peut etre d'autre méthode mais celle la est relativement simple, en fait a chaque fois que tu voudras mettre du texte dans ton site tu auras l'appel de switch et ton texte dans toutes les langues voulue ^^


Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

26 juil. 2006, 10:34

Sauf que tu ne vas pas répéter ton switch à chaque bout de phrase que tu insères... tu imagines la tête du code ?

Et quand tu veux rajouter une langue ? :lol:

Eléphant du PHP | 177 Messages

26 juil. 2006, 10:56

Oui effectivement vu sous cette angle la :'(.
Qu'elle serait ta logique et procedure à toi :) histoire d'instructionner des noob :)

Eléphant du PHP | 177 Messages

26 juil. 2006, 11:06

Héhé

¨Peut etre une solution
<?php
include (lang$i.php);
echo BONJOUR;
?>
avec comme fichier lang1.php
<?php
define('BONJOUR', 'Salut :)');
?>

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

26 juil. 2006, 11:08

Je ne suis pas spécialiste, je n'ai jamais fais de site multi-langues

Mais généralement tu stockes les textes dans des fichiers ou dans une base de données. Puis suivant la langue choisie tu charges les textes correspondant.

Ainsi, si dans ta page tu as :
<?php echo $txtBienvenue; ?>
Tu peux avoir un fichier fr_FR :
<?php
$txtBienvenue = "Bienvenue !";
?>
Un fichier en_EN :
<?php
$txtBienvenue = "Welcome !";
?>
Et le switch dont tu parlais sera utilisé simplement pour choisir quel fichier charger.
Ainsi rajouter une langue sera très simple. Tu peux par exemple confier ton fichier de langue à un(e) traducteur(trice) qui fera la traducation sans avoir besoin d'aller farfouiller dans ton code :)

Après y'a des petites variantes : si tu prends le système de fichiers, est-ce que tu fais un fichier par page et par langue ? un fichier par langue uniquement ? etc. Y'a des trucs à étudier pour que ce soit un peu organisé sinon c'est vite le bordel.

Tu peux aller lire le tuto dont elle a parlé : http://phpdebutant.org/article107.php

Sinon il y en a d'autres en cherchant sur le net ;)

Eléphant du PHP | 88 Messages

26 juil. 2006, 13:18

Bonjour,
si tu veux faire un site multi langue, tu peux passer par Lang:

Dans tes pages php tu mets par exemple:
echo Lang::getParmLang(Lang::getLanguageString(("bonjour"));
echo Lang::getParmLang(Lang::getLanguageString(("adios"));
et ensuite tu as un fichier tonsite.fr.lang dans lequel tu as:

Code : Tout sélectionner

bonjour = Bonjour adios = Au revoir
et un fichier tonsite.en.lang où tu as:

Code : Tout sélectionner

bonjour = Hello adios = Bye
Bon courage

Eléphant du PHP | 88 Messages

27 juil. 2006, 08:55

Oups j'avais pas fait attention que les fonctions sont dans le logiciel Moregroupware. Voici le code source de ces fonctions si tu en as besoin:
    // =====================================================
    // A function for parameter based strings
    // You can pass the string (which you got most likely
    // from the language file) and an array with parameters.
    // Then the vars in the string will be replaced with
    // the paramters in the array (see language dev. guide) 
    // =====================================================
    function getParmLang($string, $parmarray) {
	// add one empty array element at first position because of naming conventions
	// in detail: in your language file you start with <$1> and not <$0>
	array_unshift($parmarray, "");

	return preg_replace("/<\\$([0-9])>/e", '$parmarray[\1]', $string);
    }
	
    // 15-01-2002 12:21, rabol : <[email protected]>
    // function to get a string from the current language, 
    // or a string telling you that the string is missing
    function getLanguageString($string){
	global $hashmap, $myEnv;

	if(isset($hashmap[$string])) {
	    return $hashmap[$string];
	} else {
	    if(SETUP_RUNNING || LANG_DEBUG) { //only true during setup
		$filename = ROOTPATH."/" . "missing.".$_SESSION['SETUP']['lang'].".lang";
		$missing = $myEnv["module"]." -> ".$string;
		if(file_exists($filename)) {
		    $fp = fopen($filename,"rb");
		    $content = fread($fp, filesize($filename));
		    $pos = strpos($content,$missing);
		    if($pos === false) {
			fclose($fp);
			$fp = fopen($filename,"a+");
			fputs($fp,$missing."\n");
			fclose($fp);
		    }	 
		} else {
		    $fp = fopen($filename,"w+");
		    fputs($fp,$missing."\n");
		    fclose($fp);
		}
	    }
	}
	return "* " . $string . " * ";
    }
Je te conseille de télécharger ce logiciel, le système multi langue est bien fait je trouve.
Bon courage

Eléphant du PHP | 353 Messages

27 juil. 2006, 09:16

Moi personnellement , je fais bcpde site mutilangue et j'utilise des define.

ce qui donne :

Dans une page lang.php que je place dans un dossier lang/FR/

je crée toutes mes variables de cette manière :
define("_HELLO_","Bonjour");
Ensuite , je récupérer la langue choisie dans la session et j'affiche donc le texte dans la langue appropriée de cette manière :
include "lang/".$_SESSION['lang']."/lang.php" ;
Ensuite , pour afficher une des phrases définie , il te suffit d'inclure ceci :
<?=_HELLO_?>
++

Petit nouveau ! | 1 Messages

27 juil. 2006, 16:58

Personne ne propose a anya d'utiliser une base de donnée?
je suis relativement novice donc je ne me vexerai pas si qq un me contredit :)

1>Tu n'auras à toucher au php qu'une seule fois, à la création du site. Ensuite, tu pourra (toi ou n'importe qui d'autre même absolument non qualifié) tout gérer via une interface administrateur (suite de formulaires remettant à jour tes bases. qu'il faut créer néanmoins :) ): rajouter, modifier, supprimer un texte ou une image,... De plus, tu pourra facilement doter ton site d'un petit moteur de recherche, ou encore optimiser le référencement (ben oui, qd la mise a jour est fastoche, on en fais plus souvent!).

>> à l'inverse, si tu es sur que tu ne remettra jamais rien a jour sur ton site, ne te casse pas la tête à faire une base!!...

2>méthode générale (sujet à caution, je demande l'avis des "grands sages"):
-creer des bases jointes "anglais" "francais" ...
-créer une session enregistrant une variable contenant "anglais", "francais"...
-Pour que php réécrive les textes, composer chaque requête vers la base à l'aide de cette variable de cession: "va chercher -textemachin- dans la table -anglais/francais" (>>pour pas se casser, la valeur de la variable de session portera le nom de la base lui correspondant :wink: )

plus besoin de vérification ni de switch ni de multiples includes. Meme pour rajouter un nouveaux langage, ce serait plus simple: 1 minutes chrono le temps de modifier session.php. (+evidemment celui de traduire le texte!!! :D )

merci à vous d'apporter votre eclairage savant et averti :)

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

27 juil. 2006, 16:59

Mais généralement tu stockes les textes dans des fichiers ou dans une base de données.
;)

Après c'est une question de choix : on peut très bien utiliser une base de données pour le contenu (articles, news etc.), et plutôt des fichiers pour le texte "statique" (intitulés de liens, de menus, footer etc.)

Car à première vue je dirais que pour ce genre de petits textes, l'utilisation d'une base de données serait plus lourde : requêtes SQL à tout bout de champ...

Je ne suis pas trop d'accord avec l'argument de la facilité de mise à jour , puisqu'il faut à ce moment là que tu fasses une interface de mise à jour un peu complexe. Alors qu'avec un fichier tu en crées un nouveau, tu remplaces les valeurs par celles de la nouvelle langue et c'est terminé. Finalement, ça se vaut un peu.

Mais pour conclure, il y a des tas de façons, toutes assez identiques finalement, et ne différant que par des détails. C'est pour ça qu'il faut bien étudier avant et faire son choix selon ce qui convient le mieux :)