Site multilingue

Mammouth du PHP | 725 Messages

14 juin 2011, 06:25

Bonjour,

J'aimerais effectuer quelques pages multilinguales, en francais et anglais, j'ai quelques questions en ce sujet:

+ Ce qui est bien est ce qu'un lien du genre: http://www.site.com/LANGUE/page.html ou bien http://www.site.com/page.html?lang=LANGUE,
+ Dans les 2 cas comment peut on effectuer des liens comme cite ci-dessus,

sachant que je veux extraire les information d'une base de donnee, exemple de table:
CREATE TABLE site
id
titre_fr
titre_an
contenu_fr
contenu_an
je detecte la langue et j'affiche le titre ainsi que le contenu, merci

ViPHP
ViPHP | 2577 Messages

14 juin 2011, 10:08

Bonjour,

Je préfère la solution http://langue.site.com avec http:www.site.com utilisant la langue par défaut. Si tu ne mets pas le site dans les liens, la navigation sera exactement la même.

Rien n'empêche de faire pointer les 3 sites (fr,en,www) sur les mêmes répertoire et de calculer la langue un fonction de l'url.

Pour les tables, je préfère l'utilisation d'une colonne langue qui me semble plus simple les accès à la base en utilisant les mêmes colonnes quelques soit la langue.

N'oublie pas qu'il n'y a pas que le contenu, mais aussi les menus à traduire.

Mammouth du PHP | 725 Messages

15 juin 2011, 03:29

j'ai choisis la premiere methode qui est: http://www.site.com/LANGUE/index.html, biensur il y aurait du mod_rewrite, ce n'est pas grave, je le ferais apres, j'ai mis ce code:
<?php

$lang 		= Isset($_GET["lang"])		? $_GET["lang"]		: $lang 		= Null;
$menu 		= Isset($_GET["menu"])		? $_GET["menu"]		: $menu 		= Null;

switch ($lang) 
{
case 'fr':
			if($menu == 'accueil')
			{
				$page = 'accueil.php';				
			}
			else
			{
				$page = 'index.php';
			}
			
break;

case 'an':
			if($menu == 'accueil')
			{
				$page = 'accueil.php';				
			}
			else
			{
				$page = 'index.php';
			}
			
break;

default:
$page = 'page.php';
break;
}
?>
mais le probleme c'est que je vais afficher ce code autant de langues, par exemple accueil.php serait appeller a chaque fois que je change de langue

Eléphant du PHP | 92 Messages

15 juin 2011, 10:28

Hello,

Juste au passage, quand on utilise des code langue, on se base sur les codes ISO, aussi le code pour l'anglais est 'en' et non 'an'.
Ensuite pour ce qui est de la mécanique. Dans ce que tu nous présente y'a quand même un truc qui devrait te sauter au yeux : Quelque soit la langue, tu fais le même test : Est ce que le switch() est vraiment nécessaire ?

Quand on commence à faire un site multilingue il faut se poser la question suivante : Est ce que le site est le même en anglais avec juste les textes qui changent, ou bien s'agit-il d'un autre site ?
S'il s'agit "juste" d'une traduction, alors ta mécanique de chargement de page, ne doit pas tenir compte de la langue dans laquelle l'utilisateur va demander le site.
En revanche s'il s'agit d'un site totalement différent, je te laisse comprendre ce que ça implique...

Pour finir et à titre purement indicatif, la structure de base que tu présentes à une limitation certaine quant à l'évolutivité de ton site. Pose toi la question suivante : Et si demain je rajoute le portugais, qu'est ce qu'il se passe ?
Programmer c'est 20% de syntaxe pour 80% de réflexion et dans les 20% de syntaxe il faut encore compter une bonne dose de réflexion...
Je vous donne des conseils, pas des solutions toutes faites...

Eléphant du PHP | 256 Messages

15 juin 2011, 22:44

Bonjour,

Sinon, plutôt que maintenir une page pour chaque langue, maintien source d'erreurs, pourquoi ne pas utiliser Getext, http://php.net/manual/en/book.gettext.php ?

Assurément, l'appropriation de la méthode demande quelques heures de travail (enfin pour moi, car je ne suis pas doué), mais le jeu en vaut la chandelle, et un traducteur non-informaticien peut facilement traduire les chaînes de caractères.

Cordialement,

Gaspard

Mammouth du PHP | 725 Messages

16 juin 2011, 06:27

Merci pour vos reponses, je vais vous donner un code simple de ce que j'ai fait
Modifié en dernier par rimie le 16 juin 2011, 06:31, modifié 1 fois.

Mammouth du PHP | 725 Messages

16 juin 2011, 06:29

c'est un site statique, avec des menu traduits, par exemple: fr: Accueil et en: Home, alors j'utilise define, pour le contenu et le titre, je les ramene depuis ma BDD, une table du type:
id
titre_fr
titre_en
contenu_fr
contenu_en
je teste avec $_GET['lang']:
switch ($lang)
{
	case 'fr':
	case 'en':
			$page = 'accueil.php';

break;
// ainsi de suite
}
alors dans accueil je detecte la langue:
if($lang == 'fr')
{
SELECT titre_fr, contenu_fr FROM... 
}
if($lang == 'en')
{
SELECT titre_en, contenu_en FROM...
}

Petit nouveau ! | 3 Messages

16 juin 2011, 15:30

Ma proposition peut etre bete, mais ce que je propose est de maintenir une langue de site par defaut et à l'interieur tu donne le choix (dans l'interface) pour changer la langue de site, il faut y avoir un repertoire qui contient la totatalité des pages pour chaque langue
A+

Mammouth du PHP | 725 Messages

20 juin 2011, 02:51

puisque je fais le choix des langues par BDD, je peux utiliser un systeme de cache NON?

devlop78
Invité n'ayant pas de compte PHPfrance

20 juin 2011, 04:09

Il faut mieux utiliser des systèmes déjà présents, qui sont du genre

echo _('Page not found');

Ensuite, le traducteur s'occupe de tout http://framework.zend.com/manual/fr/zen ... using.html

Mammouth du PHP | 725 Messages

26 juin 2011, 04:29

Il faut mieux utiliser des systèmes déjà présents, qui sont du genre

echo _('Page not found');

Ensuite, le traducteur s'occupe de tout http://framework.zend.com/manual/fr/zen ... using.html
puisque le contenu n'est pas gros, pour les menus seront en DEFINE avec le contenu, quelques pages seulement se traduisent au niveau de la BDD