Bonjour,

Actuellement, je dois créer un site bilingue(anglais, français) mais prévoir espagnol, italien ... plus tard.
Plusieurs solutions s'offrent à moi et voici ce que j'ai lu sur le sujet.

"
La façon la plus prisée des développeurs est de créer un fichier contenant uniquement des variables dont les valeurs correspondent à des expressions prédéfinies.


<?php
$message_bienvenue = "Bienvenue sur mon site !";
$message_connexion = "Vous êtes désormais connecté...";
?>


Le fichier est ensuite enregistré dans un dossier /lang/fr/. Puis le programmeur code quelques autres fichiers avec des noms de variables identiques mais contenant des valeurs traduites ("Welcome to my site !", "Now you're logged in...") et les enregistre dans d'autres dossiers : /lang/en, /lang/de/, etc. Il ne lui reste plus qu'à implémenter un script permettant de récupérer le langage préféré de l'utilisateur et en fonction du résultat, inclure le fichier de langue correspondant.

Cette méthode a l'avantage d'être relativement simple à mettre en place ; cependant, vous constaterez rapidement que plus votre site grandira, plus vos fichiers de langue deviendront conséquents, et qui dit fichier plus conséquent dit fichier plus lourd, entraînant un ralentissement du temps d'exécution. Elle est donc réservée aux "petits" sites.

Mais si vraiment vous sentez que votre projet comportera beaucoup, beaucoup de texte à traduire, l'utilisation de la bibliothèque Gettext (GNU) sera préférable. C'est cette bibliothèque très utile mais peu connue des développeurs en herbe n'est pas facile à mettre en place"

J'ai pensé aussi mettre un code+libellé en base de donné et en fonction de la langue chercher dans la bonne table, mais ceci demanderait beaucoup d'accès à la base de données et serait peut-être pénalisant.

J'aimerais savoir si quelqu'un peut me donner son avis sur le sujet ou s'il connait des liens qui pourrait m'aider à mettre en place mon site multilangues

Merci d'avance pour vos réponses

Gildelau
Salut,

gildelau a écrit :
Mais si vraiment vous sentez que votre projet comportera beaucoup, beaucoup de texte à traduire, l'utilisation de la bibliothèque Gettext (GNU) sera préférable.
Je ne connais pas Gettext mais à priori à part "standardiser" une façon de faire je ne vois pas ce que ça pourrait apporter en terme d'optimisation du temps de traitement.

la technique "standard" se résume à constituer le contenu d'une page avec des constantes PHP. Tout dépend ensuite du "niveau de précision" des textes mais en résumé on a 2 formes possibles pour une page donnée (par exemple la page bienvenue.php) :
require("includes/language/$language/bienvenue.php"); 
echo '<h1>'.TITRE.'</h1>';
echo '<p>'.TITRE_DETAILS.'</p>';
ou
require("includes/language/$language/bienvenue.php"); 
echo PAGE_BIENVENUE;
Ensuite en fonction de la langue choisie (variable $_GET ou cookie) on fait un include du bon fichier de langue. En l'occurrence ça donne :

// $language = french :
define('TITRE', "Bienvenue");
define('TITRE_DETAILS', "Ça  boume ?");
ou
define('PAGE_BIENVENUE', "<h1>Bienvenue</h1><p>Ça  boume ?</p>");

Ou Bien
// $language = engliqh :
define('TITRE', "Welcome");
define('TITRE_DETAILS', "What's'up?");
ou
define('PAGE_BIENVENUE', "<h1>Welcome</h1><p>What's'up?</p>");
Bonjour Heyoan,

Merci pour votre réponse. En fait il s'agit d'un site touristique avec description de monuments donc il risque d'y avoir pas mal de page à traduire. Peux-t-on imaginer une solution de mixe avec les 2 solutions.
Les fichiers de traductions php pour tous les libellé, boutons ... apparaissant dans la page et un Gettext ou acces à une base de données pour les textes traduits.

Merci de vos conseils

PS: Auriez vous un lien pour un tutoriel de mise en place des Gettext sur Windows
Outre les constantes, on peut aussi utiliser un tableau.
$i18n = array (
  'en' => array (
    'titre' => 'Welcome',
    'titre_details' => 'All right?'
  ),
  'fr' => array (
    'titre' => 'Bienvenue',
    'titre_details' => 'Ça boume ?'
  )
);

require ('includes/i18n.php');
$lang = 'fr';
echo '<h1>'.$i18n[$lang]['titre'].'</h1>'; 
echo '<p>'.$i18n[$lang]['titre_details'].'</p>';
gildelau a écrit :
PS: Auriez vous un lien pour un tutoriel de mise en place des Gettext sur Windows
Heyoan a écrit :
Je ne connais pas Gettext
Smiley cligne

Et bien sûr quelle que soit la solution choisie on peut très bien remplacer le require par une lecture en base...
Sinon un sujet récent parlait de cms dont certains sont réputés pour leur gestion multilingue : c'est peut-être une bonne piste ?
Modifié par Heyoan (07 Dec 2009 - 13:03)
Merci à tous pour toutes ces réponses, je vais me plonger dans tout ça Smiley biggrin

Cordialement
Gildelau
À noter que la plupart des frameworks de développement web permettent d'utiliser Gettext ou un outil similaire.
Florent V. a écrit :
À noter que la plupart des frameworks de développement web permettent d'utiliser Gettext ou un outil similaire.

Notamment Symfony, qui, en plus de l'internationalisation, prend en charge la localisation.