Gestion des multiextension pour un site multilingue

Eléphant du PHP | 216 Messages

22 sept. 2010, 16:20

Bonjour,

voilà j'ai plusieurs url avec des extensions différentes :

www.example.com
www.example.fr
www.example.it
www.example.es

et j'aimerais, en fonction du choix de la langue de l'internaute le dirigé vers telle ou telle url.

Quelle est la technique que vous adoptez ?

Merci d'avance pour votre aide.

ViPHP
ViPHP | 2291 Messages

22 sept. 2010, 16:39

Salut,
Un truc du genre
$lg = (isset($_SESSION['lang']) ? $_SESSION['lang'] : 'com');

header("Location: http://www.example. .$lg);
Modifié en dernier par dunbar le 22 sept. 2010, 18:15, modifié 3 fois.
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

Eléphant du PHP | 216 Messages

22 sept. 2010, 16:55

Bonjour Dumbar et merci pour ta réponse rapide.

Mais au fait je ne veux pas un truc du genre, c'est assez sérieux ce que je demande.

j'aimerais être sûr de mon coup.

je ne voudrais partir sur une fausse piste et tout recommencer tu me comprends ?

Je voudrais mettre en place un site multilingue avec des noms de domaines différents alors je fait appel à des personnes qui ont de l'expérience dans ce domaine et qui pourrait
me filer des tuyaux.

merci.

ViPHP
ViPHP | 5462 Messages

22 sept. 2010, 16:57

en quoi ca réponse n'est pas suffisante ? :shock:

Eléphant du PHP | 216 Messages

22 sept. 2010, 17:27

Si la langue n'est pas dans session...

ViPHP
ViPHP | 5462 Messages

22 sept. 2010, 17:36

Si la langue n'est pas dans session...
c'était un exemple, (genre langue préférer du client),

après a quel niveau la personne fait le choix ?
comma tu gères ca t'as un site par langue ? serveur différent ? virtual directory ?

Eléphant du PHP | 216 Messages

22 sept. 2010, 23:27

Ben je compte mettre des drapeaux sur chaque page, ce qui permettra aux internautes de choisir leur langue.

mais si une personne tape directement :

www.example.es

il faut que j'intègre un coe php qui vérifie l'url, et en fonction de l'url utilise la traduction espagnole ?

Il faut donc que je prévois dans les deux sens ...

ViPHP
ViPHP | 5462 Messages

23 sept. 2010, 00:09

donc ?
un site par langue ? serveur différent ? virtual directory ?

Eléphant du PHP | 216 Messages

23 sept. 2010, 09:38

un site par langue.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

23 sept. 2010, 11:57

La solution de dubar, bien qu’extrêmement dépouillée est la bonne ;)
Ensuite, c'est à toi de faire le système qui alimente la session.

Ce que je te propose, c'est une page de ton application qui permet de modifier la langue, qui la stocke en session/cookie (préférence pour le cookie, qui persiste après extension de la session, si bien configuré), et qui redirige sur le bon domaine.
Ensuite, dans ton application, tu fais en sortes que tout appel passe par une fonction de vérification qui s'assure que la langue et le domaine correspondent.
Si ce n'est pas le cas, tu as la fonction de dunbar, qui te permet de rediriger sur le bon domaine (bien sûr, il te reste de t'assurer que la langue contenue dans le cookie est une des langues que tu acceptes ;)).

Par contre, mettre en place le multilangue ne se limite pas au nom de domaine : quid des url ? pour un référencement optimal, tu devrais avoir, par exemple : http://www.exemple.fr/nous_contacter.html et http://www.exemple.co.uk/contact_us.html
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 216 Messages

23 sept. 2010, 12:34

OK, ça me va comme explication

voilà ce que j'ai en tête de chaque page

if(!empty($_COOKIE['lang']))$lang=$_COOKIE['lang'];
if(!empty($_GET['lang']))$lang=$_GET['lang'];
if(!empty($lang) && ($lang=='eng' || $lang=='fr' || $lang=='esp')){
  include('lang-'.$lang.'.php');
  setcookie('lang',$lang,time()+3600*25*365,'/');
}else include('lang-eng.php');

// ajout du code de Dunbar

$lang = (isset($_SESSION['lang']) ? $_SESSION['lang'] : 'com');

header("Location: http://www.example. .$lg);

par contre comment coder les autre extensions ?

ViPHP
ViPHP | 2291 Messages

23 sept. 2010, 21:55

La solution de dubar,
Salut zes :wink:
qu’extrêmement dépouillée
Oui effectivement

Alors voici mon idée de départ en beaucoup plus détaillé
<?php
/**
* Exemple en partant de la demande.
* @www.example.com
* @www.example.fr
* @www.example.it
* @www.example.es
* Donc le choix des langues / com, fr, it, es
*/
session_start();
//Lien GET qui permet de choisir la langue.

echo '<a href="'.$_SERVER['PHP_SELF'].'?&lang=fr">FR</a> | <a href="'.$_SERVER['PHP_SELF'].'?&lang=es">ES</a> | <a href="'.$_SERVER['PHP_SELF'].'?&lang=it">IT</a> | <a href="'.$_SERVER['PHP_SELF'].'?&lang=com">EN</a>';


	/**
	* Vérification qu'un cookie existe.
	*/
	if(iSset($_COOKIE['lang']))
	 {
	 	//-->Si il existe on attribue sa valeur a la variable de SESSION
	 	$_SESSION['lang'] = $_COOKIE['lang'];
	 }
	 elseif(iSset($_GET['lang']))//-->Si pas de cookie on vérifie si une valeur existe dans la variable GET
	 {
	    //-->Si elle existe ont attribue la valeur a la variable de SESSION
	    $_SESSION['lang'] = $_GET['lang'];

	 }
	 else
	 {
	 	//Langue par default.
	 	$_SESSION['lang'] = 'com';
	 }

//-->Ont verifie si il existe une SESSION['lang'] dans le cas contraire ont attribue une valeur par defaut.

$lang = (isset($_SESSION['lang']) ? $_SESSION['lang'] : 'com');

//-->Redirection vers la page example.$lang
header ("Location: http://www.example. . $lang);

?>
Attention un " disparaît dans le header ??? header ("Location: http://www.example. . $lang);
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

Eléphant du PHP | 216 Messages

23 sept. 2010, 23:37

Ok Dunbar,

si je te suis bien ça signifie qu' une personne vivant en Espagne, qui va taper pour la première fois :


www.example.es

va être automatiquement redirigée vers le .com (vers le site version anglais donc), puisqu'il n'y aura ni session ni cookie...

mais moi ce n'est pas ce comportement que je voudrais,

j'aimerais qu'au moment où une personne tape le site

www.example.es pour la première fois, qu'il tombe sur la version espagnole en .es et non la version anglaise en .com.

Je suis donc bien forcé d'effectuer au préalable un test sur l'url...Et ça avant le test des cookies et des session...

Tu me suis ?

Eléphant du PHP | 422 Messages

24 sept. 2010, 12:31

hello

utilise preg_match ou strpos pour déterminer si tu as une extension connu dans une var de $_SERVER ou __FILE__

++
toujours faire une recherche sur http://www.php.net et/ou sur http://www.google.fr :)
utiliser http://ideone.com/ pour vos codes :)