Partage
  • Partager sur Facebook
  • Partager sur Twitter

Site multilingue (Français/Anglais)

Sujet résolu
    16 juillet 2019 à 20:03:46

    Bonjour, tout est dans le titre, je suis sur un projet qui a besoins que le site soit accessible en Français et Anglais, n'ayant jamais réalisé ce genre de fonctionnalité j'aurais besoins de vos avis. Après de nombreuse recherches, pas assez concluantes pour mes besoins, j'ai quelques idées.

    L'idée m'étant venue en 1er était de stocker tout les textes à traduire dans une base de données puis ensuite en fonction de la langue choisi via les boutons en bas de la page ou via la langue du navigateur détecter faire la requete en fonction. Mais je trouve cette façon de faire un peu lourd.

    La deuxième idée c'est de copier-coller le site en version anglais puis la stocker dans un sous-domaine du type www.en.nomsite.fr/ puis en fonction de la langue détecter / choisi rediriger en fonction.

    La dernière solutions que j'ai vu grâce a quelques recherches c'est d'utiliser gettext et toutes les autres fonctions lié ainsi que PoEDIT, cette solution ainsi que la solution du sous domaine me parait correcte.

    Je précise que le projet de site n'a aucun objectif réelle de référencement mais l'utilisation des sous-domaines distince améliore le SEO donc je sais pas trop quoi choisir.

    Merci de vos conseils !

    • Partager sur Facebook
    • Partager sur Twitter
      16 juillet 2019 à 23:27:30

      Bonjour,

      Ta 2e solution est indispensable mais ça ne répond pas à la question de comment rédiger le site web. La redirection redirige soit vers 2 sites distincts, une sorte de copié / collé en traduisant tout le contenu, ou bien sinon vers le même index, avec un simple paramètre de language ( index.php?lang=en ou =fr )

      La 1ère solution est certes un peu lourde à mettre en place, mais c'est ce qu'on fait parfois pour la partie "dynamique" du site : des libellés qu'on met dans des variables à afficher un peu partout sur le site.

      La meilleure solution (je ne connais pas getText ni poEdit mais ça doit correspondre) c'est de faire des "templates" pour chaque language, le template c'est juste le code HTML du site avec le contenu statique, traduit en chaque langue, et qui contient les variables de la 1er solution pour la partie dynamique. Il faut donc au maximum séparer le code php et la partie avec le contenu statique à traduire (exclure aussi CSS et JS) et donner ces fichiers statiques aux traducteurs, et voila :) 

      • Partager sur Facebook
      • Partager sur Twitter
        17 juillet 2019 à 18:30:49

        Bonjour,

        En fait, il ne faut pas confondre "texte" et template (ou gabarit) dans ce genre de situation. On ne veut pas se casser la tête à dupliquer des templates juste parce que le texte doit être dans une autre langue.

        Ensuite, on ne veut pas créer non plus un sous-domaine pour une langue. En effet, si on veut bien référencer le site, un sous-domaine est considéré à bien des égard comme un site web à part entière. La meilleure pratique sera donc d'y aller avec un dossier virtuel : https://monsite.com/fr ou https://monsite.com/en

        Pour le stockage des informations dans la base de données, je t'invites à utiliser ce procédé-là, seulement pour des informations qui sont déjà stocké dans la base de données. Par exemple, si ton site web contient une section "news" et que ceux-ci sont stocké dans ta base de données, il faudra que la structures de tes tables permettent de savoir la langue de ta news et ainsi pouvoir afficher son contenu EN ou FR, dépendant de la langue désiré par l'utilisateur.

        Ceci étant dit, voici la méthode utilisé par plusieurs CMS et Framework. Cette méthode rejoint celle que tu mentionne : getText / PoEdit.

        Pour la petite histoire, getText est utilisé en Symfony notamment. Wordpress utilise aussi ce genre de système.

        Personnellement, celle que j'aime utilisé est une méthode plus simple :

        • Tout ton texte dans ton site devra être affiché nativement dans une seule langue. Par convention, on utilise généralement l'anglais comme langue par défaut;
        • Un fichier array PHP contenant les termes devra être créé. La clé sera la phrase initiale et la valeur sera la traduction;
        • Une fonction devra être crée afin de pouvoir retourner la phrase à utiliser. Cette fonction sera appelé au moment où tu veux afficher une phrase. Elle ira chercher la langue de l'utilisateur, analysera si cette phrase est dans ton array() et si oui, elle retournera la traduction. Si non, elle retournera bêtement la phrase passé en paramètre;

        Cette façon de faire est à mon sens la plus optimale :

        • Pas d'extension PHP nécessaire;
        • Idéal pour les petites applications;
        • Simple à mettre en place

        Évidemment, on peut la modifier afin de répondre à des besoins plus avancé :

        • La fonction qui récupèrera le texte pourrait prendre en compte des variables afin d'adapter le texte selon les besoin dynamique. Par exemple, si j'ai un texte qui est celui-ci : N'hésitez pas à contacter email@email.com pour plus d'infos. "email@email.com" est dynamique. Mon texte devra avoir une variable qui se chargera d'être remplacé par le contenu dynamique. Je t'invite à voir la fonction native de PHP qui est sprintf() pour en comprendre d'avantage;
        • Écrire les traduction dans un fichier CSV et le convertir ensuite en fichier array() PHP. Cela faciliterait la traduction et tu pourrais le partager plus facilement à d'autres personnes;
        • Éviter de tout mettre les traductions dans un seul fichier. Découper le site en section et appeler le fichier de traduction dépendant de la section. Cela évitera de charger une tonne d'information et ça facilitera aussi les traductions;
        • etc.

        Pour te donner une idée, la plateforme Magento, qui est basé sur Zend Framework, utilise globalement ce système de traduction. Et franchement, c'est celui qui me plait le plus à utilisé comme programmeur.

        N'hésite pas s'il y a quoi que ce soit !

        • Partager sur Facebook
        • Partager sur Twitter
          17 juillet 2019 à 22:42:19

          Salut ! Merci a vous tous j'me suis renseigné sur toutes les solutions puis finalement meme si la solution de Luigi_home me semblait sympa j'ai fini par adopter la librairie gettext ainsi que PoEdit qui dans mon cas me permet de mettre rapidement les traductions en place. Merci tout de même pour vos conseils !!!
          • Partager sur Facebook
          • Partager sur Twitter

          Site multilingue (Français/Anglais)

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown