Modérateur
Bonjour,

Je voudrais proposer une page statique contenant un formulaire (donc pas tout à fait statique) en plusieurs langues (je parle bien d'une page et non d'un site là). Je me demandais quel est la meilleure méthode pour réaliser ça.
Deux méthodes que je vois de prime abord :
* Faire une copie de la page et la placer dans un autre dossier (par exemple nommé "en" pour la version anglaise) puis la traduire. Défaut : si je modifie la page originale, les modifications ne sont pas répercutées sur les autres pages traduites.
* Utiliser une chaîne get dans l'url pour identifier la langue choisie et récupérer la traduction se trouvant soit dans des constantes, soit dans un tableau (comme dans FluxBB), méthode php donc.
Bien entendu, je pense plutôt opter pour la deuxième solution, mais cela va sûrement avoir une répercussion sur le référencement de mes pages non ?
Vous connaissez d'autres moyens ?
Sinon, j'ai lu cet article-là : http://blog.nalis.fr/index.php?post/2011/02/08/traduction-et-multilinguisme-d-un-site-web-%3A-Gettext-et-poedit-tutoriel-et-exemple
Utiliser gettext pour une seule page ?

Merci pour vos avis.
Modifié par jojaba (24 Jun 2012 - 21:33)
Salut,

Pour ma part, j'utilise mon gestionnaire de templates maison, dans mes templates, j'ai un dossier par langue, ensuite je passe la langue demandé en variable GET (avec url rewrite), jes passe la valeur a mon gestionnaire de templates (objet) qui sait du coup dans quel dossier prendre les templates.

Pour ce qui est des données, j'ai un système I18N dans ma base, et les données sont importés dans la langue courante (celle en GET) si elles existes, sinon il y a un fallback sur la langue par défaut.

J'ai préféré différencier les templates plutôt que stocker dans des tableaux, car ça me permet a l'occasion de différencier les intégrations selon la langue (background, mise en page, etc...), et c'est également plus simple a gérer si beaucoup de langues différentes.
Modérateur
Je rappelle que ce n'est que pour une page...
Je vais probablement opter effectivemment pour le tableau (un tableau pour chaque langue) et mettre en place une reconnaissance de la langue du visiteur avec ça :
substr($HTTP_ACCEPT_LANGUAGE,0,2)

Bine entendu on pourra modifier la langue en cliquant sur un lien...
Oui, dans ce cas, et sans perspective d'évolution, c'est effectivement une solution correcte Smiley smile
jojaba a écrit :
mettre en place une reconnaissance de la langue du visiteur avec ça :
substr($HTTP_ACCEPT_LANGUAGE,0,2)

Trois cas de figure qui risquent de te mettre en échec:
- Pas d'en-tête Accept Language envoyé (prévoir une langue par défaut).
- L'en-tête HTTP définit d'abord une langue que tu ne proposes pas, puis une langue que tu proposes, par exemple:
Accept-Language: cs,en;0.5
(Si tu proposes de l'anglais et du français avec le français comme langue par défaut, tu vas afficher du français... alors que l'utilisateur dit accepter le tchèque et l'anglais.)
- L'en-tête HTTP définit une priorité de langues dans un ordre différent de celui de lecture, par exemple:
Accept-Language: de;0.5,en
(Ici la langue demandée en priorité est l'anglais.)

Une bonne gestion de Accept-Language demande de parser la chaine de caractères, de créer un tableau associatif avec pour chaque item code de langue, code de région et indice de priorité, de le classer par priorité. À partir de là, tu peux faire des comparaisons avec ce que tu proposes comme langues.
Il y a sans doute des classes PHP compactes qui font ça bien.