Bonsoir !

Pour un site que je crée actuellement, on vient de me dire que celui-ci devrait être multilingue.

J'ai donc été un peu me renseigner et j'ai opté pour une solution qui me paraît la plus logique et la plus simple à mettre en place. Je vais donc créer un fichier php pour chaque langue différente et mettre dedans des constantes avec à chaque fois la bonne traduction pour chaque texte ou mot. Ensuite, en fonction de quelle langue l'utilisateur choisit, ça se stockera dans une variable de session et j'inclurais la bonne langue en fonction du contenu de la variable de session. Je pense qu'il s'agit de la technique de base. Evidemment, j'ai opté pour celle là car il est possible qu'au fur et à mesure où le site prend de l'ampleur (c'est une entreprise "en ligne"), il faudrait pouvoir rajouter facilement d'autres langues.

Néanmoins, je viens à vous pour savoir comment vous auriez procédé et si ma manière de faire est correcte. J'ai vu le tutoriel de Grafikart pour internationaliser son site Web (je ne l'ai pas vu au complet) mais ça m'a l'air un peu compliqué et puis surtout la vidéo date de quelques années donc je ne sais pas si c'est d'actualité.

Ensuite, vient la partie un peu plus compliquée. Si on considère que ma manière de procéder est bonne, cela veut dire que tout se passera sur les même fichiers (et non dans des dossiers différents)

Le truc, c'est que j'aimerai faire pointer des sous-domaines.

Ainsi, un utilisateur qui arrive sur le site via www.monsite.com sera redirigé sur la page pour choisir sa langue. Par contre, un utilisateur qui arrive via fr.monsite.com aura automatiquement le site en français. Pareil s'il vient via nl.monsite.com ou en.monsite.com.

Mais est-ce possible de faire tout ça en ne pointant que sur un même répertoire ? Au début, je pensais voir pour récupérer l'url et vérifier le sous-domaine et si le sous-domaine est égal à fr, créer automatiquement la variable de session FR pour afficher le site en français, etc mais je ne sais pas comment procéder.

Bon, je me doute que je ne doit pas être tout à fait clair donc je vais vous résumer rapidement l'intérêt de ce message :

Premièrement, la façon énoncée plus haut pour la traduction est-elle correcte ? Sinon, qu'avez-vous à me conseiller ?
Deuxièmement, pointer plusieurs sous-domaine sur un même répertoire et traduire automatiquement en fonction du sous-domaine est-il possible ? Parce que là, j'ai l'impression de mélanger un peu tout.
Et un petit troisièmement, ce genre de pratique peut-il influencer le référencement sur Google ?

En bref bref bref.. Comment feriez-vous ? :D

Je sais que je viens avec beaucoup de questions en une fois mais c'est vraiment un truc qui me paraît complexe et complètement tordu :D (un peu comme la POO :D)

Si vous avez des questions, n'hésitez surtout pas !

Je vous remercie !
Boris :)

10 réponses


Huggy
Réponse acceptée

Je pense que tu dois te baser en premier sur la langue du navigateur Accept-Language et seulement si l'utilisateur choisit une autre langue, alors tu gères un cookie.
Pour donner l'illusion qu'il y a plusieurs sites, tu peux réécrire les urls en y placant le code langue, ça permet aux moteurs de recherche de prendre en compte les différentes versions du site

Oh ! J'ai mis ta réponse en résolu sans faire exprès ! :D

Pour ce qui est du Accept-Language, si je comprends bien, en fonction de la langue du navigateur, il m'affiche la bonne version du site ? Si c'est cela, comment faire pour re diriger l'utilisateur en fonction de ça ? j'ai été un peu m'informer mais je dois avouer que je n'ai pas trop compris :)

Pour l'URL rewriting, tu me conseilles donc de faire ainsi : www.monsite.com/en par exemple ? Ou alors il est possible de faire en.mon site.com via l'URL rewriting ? Mais ça me paraîtrait étrange :/

Pour faire simple je n'ai jamais touché au Accept-Language ni à l'URL rewriting (Je pensais m'y mettre Quand j'arriverai à la partie du site ou cela sera nécessaire) :)

Je te remercie de ta réponse en tout cas !
Boris

Tout d'abord, as-tu un router ou utilises-tu un framework ?

Pour le PHP ?

J'utilise un framework CSS (Bootstrap) pour la mise en page mais que je modifie beaucoup sinon pour le PHP, je fais sans rien et en procédural :)

Je sais bien que je devrais penser à passer à la POO mais j'ai quelques difficultés et comme je n'aime pas avoir du code que je comprends pas, je préfère être sur de bien le comprendre avant de commencer à l'utiliser concrètement dans mes sites :)

Oui je parlais pour le php, d'accord ;)

Pour l'architecture de ton site, elle ressemble plus à :
monsite.com/index.php?page=accueil Pour l'accueil
monsite.com/index.php?page=contact Pour la page contact
Ou à
monsite.com/accueil.php Pour l'accueil
monsite.com/contact.php Pour la page contact ?

Voici un récapitulatif qui me vient à l'esprit :

  • le + simple http://monsite.eu/mapage.php la requête contient ACCEPT-LANGUAGE : fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3
    la page php récupère la liste des langues et choisit la langue préférée
    les static ne sont pas impactés
    pas besoin de reécrire les urls

  • le + facile http://monsite.eu/mapage.php ?lang=fr
    la page gère l'argument lang placé dans l'url
    les static ne sont pas impactés
    pas besoin de reécrire les urls (enfin si)

  • le + compliqué http://**fr.**monsite.eu/mapage.php
    le code langue est dans le hostname
    nécessite de paraméter les DNS
    nécessite de paramétrer le serveur web , une config par langue
    demande une intervention pour chaque ajout de langue
    pour avoir des statics communs, il faut une url commune comme http://images.monsite.eu
    problèmes possibles avec ajax si on appelle un domaine différent

  • le + elegant http://monsite.eu /fr/mapage
    le hostname est le même pour toutes les langues
    pas de config particulière des DNS ou du serveur
    les statics communs n'ont pas de code lang donc il n'y a rien à faire
    les statics propres à une langue doivent être dans des dossiers /en/, /fr/ ...
    les pages sont traitées par un index.php qui détecte le code langue dans la request_uri
    nécessite de développer un router/dispatcher pour parser les url mais aussi les formatter.
    Faire attention à traduire toutes les pages sinon on a du 'duplicate content' est on est puni par les moteurs de recherche

Personnellement, je pense que tu peux faire comme ceci :
Si tu accèdes sur monsite.eu:

  1. Si il a un cookie pour la langue, tu mets cette langue là
  2. Sinon, tu regardes ACCEPT-LANGUAGE
  3. Et finalement tu mets la langue par défaut si y'a pas une autre langue
    Si tu accèdes sur langue.monsite.eu (fr.monsite.eu, en.monsite.eu...):
  4. Tu mets/changes le cookie pour la langue dans la langue du sous-domaine et tu rediriges sur monsite.eu

Après, c'est comme JE ferais, toutes les manières que Huggy a dit sont faisables

Juste si je peux me permettre de te corriger, Huggy, tu ne dois pas forcément configurer chaque sous-domaine manuellement avec '*' et les virtualhost (je t'invite à y regarder)

PS: juste, le "plus élégant", je trouve pas réellement ça plus élégant que ce que je viens de te dire. En effet, pour l'utilisateur c'est plus ennuyant d'aller toujours sur /fr/.... que simplement sur /...

Pour le ACCEPT-LANGUAGE, php propose tout un lot de fonctions ici
et pour choisir la langue la plus appropriée Locale::acceptFromHttp et Locale::lookup

Bonjour ! Je vous remercie VRAIMENT de vos réponses ultra complètes !! Ca m'a bien aidé et j'y ai encore réfléchi durant la journée.

Je vais opter pour la version la + élégante proposée par Huggy. C'est celle qui me paraît le plus simple à mettre en place étant donné qu'il y aura pas mal de contenu géré dynamiquement.

Par contre, je n'ai pas compris ce que tu entend par "request_uri" :(

Néanmoins, récapitulons pour voir si j'ai compris l'ensemble du truc :p

Je crée un dossier pour chaque langue. Dans chaque dossier, il y aura un code source (pareil peu importe la langue puisque le contenu est le même sur chaque version du site) ainsi que son fichier de langue (en.php ou fr.php etc) qui contiendra toutes les constantes permettant de traduire facilement le contenu. Pas besoin de créer de variables de session pour savoir dans quelle langue il doit afficher le site car chaque dossier affiche son propre fichier langue.

Ensuite, si je veux rajouter une langue, j'ai simplement à copier/coller un des dossiers, le renommer, traduire chaque fichier pour qu'il corresponde à la langue, changer le fichier langue et tout traduire et puis faire certaines modifications (au niveau SQL mais c'est mon job ça :D)

Etait-ce bien ça ? Que mettre dans le dossier index.php qui se trouvera à la racine (en dehors des dossiers fr, en, etc) ?

Et je me disais, si j'ai juste dans ce que j'ai compris, pourquoi ne pas pointer de sous-domaines sur les différents dossiers alors ? Ca ne devrait pas créer de problèmes, si ? Ce n'est pas vraiment mon domaine car je n'y connais pas grand chose en serveur mais je suis certain qu'on doit pouvoir trouver comment faire :)

En tout cas, je vous remercie encore de vos réponses et j'espère que je n'ai pas tout compris de travers !

Amicalement,
Boris :)

Faire des sous-dossier, normalement on en a pas besoin
côté php chaque page est unique, elle se traduit toute seule en allant puiser ses traductions dans un fichier ou dans un bd.
L'intêret c'est pour la maintenance, une mise en page unique

la request_uri c'est la partie de l'url après le host
dans l'url http://monsite.fr:8080/titi/tata/toto.php?id=12
le host c'est monsite.fr:8080
le hostname c'est monsite.fr
la request_uri c'est /titi/tata/toto.php
la query_string c'est id=12