We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 8894
    • 114 Posts
    Bonjour à tous,

    Lors de la mise en place de mon site web, j’ai mis en place une architecture pour la gestion du multilingue, que je vais essayer d’expliquer ici.

    L’idée de départ est la même que la méthode du wiki: avoir un répertoire par langue, nommé par le code ISO de 2 lettres (fr, en, de, etc).
    Cependant, mon objectif était que la gestion soit aisée pour le non informaticien.

    Voici les points que j’ai voulu traiter:

    1) L’idée majeure est qu’il y a une langue de référence.
    Pour rajouter une langue, il suffit de dupliquer le dossier de la langue de référence, puis de traduire.
    Pour rajouter une seule page dans une autre langue, on duplique le document, on modifie son parent, puis on traduit.

    2) Dans la solution du wiki, lorsqu’on ajoute une traduction, il faut mettre à jour tous les documents dans les autres langues pour rajouter dans la TV la référence de la nouvelle traduction.
    Dans ma solution, on n’a pas à modifier les autres documents: on indique simplement dans la nouvelle traduction la référence du document dans la langue de référence (pour les documents de la langue de référence, on ne met rien)

    3) Toute page de la langue de référence n’est pas nécessairement traduite dans la langue de référence, et vice versa: dans ce cas, on ne met rien comme référence.

    4) Il fallait aussi gérer la traduction des templates utilisés dans les snippets (dans mon cas, AjaxSearch, Eform et WebLoginPE). Or, je ne voulais pas utiliser des fichiers de langue car je voulais que tout le processus de traduction passe par le manager pour que ce soit uniforme.


    Description de la solution

    1) Créer une TV pour indiquer la référence du document dans la langue de référence (dans mon cas le français). Pour les documents de la langue de référence, on laisse cette TV vide.
    Afin que ce soit plus ergonomique, j’ai créé cette TV avec le snippet ddTree, mais on peut se contenter d’une TV de type nombre.

    2) Créer un snippet de gestion des aspects multilingues, qui utilise
    Ce snippet peut:
    - récupérer la langue d’un document, en récupérant le nom du dossier parent avec le snippet GetField
    - récupérer l’ID d’un document qui est la traduction d’un document dans une langue donnée, grâce à un algorithme basé sur la TV créée précédemment

    3) Créer un template vide constitué uniquement de TV, afin de contenir les éléments textuels du template général (ex: une TV pour le pied de page, ...).
    Chaque dossier de langue doit contenir un document avec ce template (document publié, mais masqué dans le menu et non recherchable).

    4) Créer le template général qui est commun à toutes les langues, et lui appliquer la TV définie en 1). Ce template utilise le snippet de gestion des aspects multilingues pour tous les aspects liés à la langue.

    Exemple:
    [tt]<html xmlns="http://www.w3.org/1999/xhtml" lang="{{DocLang}}" xml:lang="{{DocLang}}" dir="ltr">[/tt]
    avec dans le chunk DocLang, l’appel suivant, qui récupère la langue du document courant:
    [tt][!MultiLingual? &action=`getLang` !][/tt]

    Autre exemple, pour le pied de page:
    [tt]<div id="footer">
    [!GetField? &docid=`[!MultiLingual? &action=`getTranslation` &docId=`2` !]` &field=`SiteFooter` !]
    </div>[/tt]
    où 2 est le document dans la langue de référence qui contient les éléments textuels du design général, et SiteFooter est la TV associée au pied de page.

    5) Créer les documents dans la langue de réference

    6) Dupliquer le répertoire de référence et traduire


    Gestion des liens de traduction

    J’ai créé un snippet dédié, appelé ainsi dans mon template:
    [tt][!TranslationLink? &languages=`fr,en` !][/tt]
    Pour chaque langue passée en paramètre, ce snippet:
    - vérifie s’il s’agit de la langue du document en cours, auquel cas il n’affiche pas de lien
    - vérifie si le document courant est dans la liste des documents ne devant pas avoir de liens de traduction, auquel cas il n’affiche pas de lien
    - constitue l’URL de la traduction du document courant en utilisant le snippet de gestion des aspects multilingues
    - récupère le texte du lien dans une TV du document qui contient les éléments textuels du design général


    Snippet AjaxSearch

    1) Les textes affichés dans le template font l’objet de TV dans le document qui contient les éléments textuels du design général.
    Dans mon cas, il s’agit uniquement du texte par défaut du champ de recherche. J’ai utilisé un template personnalisé pour $asTemplates[’form’] et $asTemplates[’layout’], qui récupère la valeur de la Tv grâce au snippet GetField et au snippet de gestion des aspects multilingues.

    2) Le paramètre &language attend un nom complet tel ’english’ et non le code de 2 lettres ’en’. Pour résoudre ce problème, j’ai modifié le snippet de gestion des aspects multilingues afin qu’il puisse renvoyer le nom complet de la langue lorqu’on l’appelle ainsi:
    [tt][!MultiLingual? &action=`getLang` &byName=`true` !][/tt]

    3) Comme j’utilise l’option non-Ajax, j’ai une page de résultat dans chaque langue. Pour le paramètre &AS_landing, j’utilise donc encore une fois le snippet de gestion des aspects multilingues.


    Snippet EForm

    J’ai une page de contact par langue. Pour conserver le principe que tout le processus de traduction passe par le manager sans mettre en péril la mise en forme du formulaire, j’ai adopté la solution suivante.

    1) J’ai défini un template spécifique aux pages de contact:
    - le contenu est le même que le template général
    - il s’y ajoute une TV pour chaque texte du formulaire

    2) Pour le paramètre &tpl, j’ai créé un chunk pour le formulaire de contact, qui utilise les TV définies.
    Extrait du chunk:
    [tt]<div class="form_textfield">
    <label for="contact_name">[*ContactFormNameLbl*]* :</label>
    <input type="text" name="contact_name" id="contact_name" eform="[*ContactFormNameLbl*]::1" />
    </div>[/tt]
    où ContactFormNameLbl est une TV

    3) Le paramètre &language a le même fonctionnement que celui d’AjaxSearch
      • 8639
      • 24 Posts

      Je suis pas encore suffisament au point avec modx pour comprendre tout ce que tu as fait, par contre, c’est sympa d’avoir fait une description et une explication aussi détaillée smiley
        • 7010
        • 23 Posts
        Bonjour,

        Ta solution m’a l’air d’être un peu plus "ergonomique" que celle proposée dans le wiki.

        Je pense effectivement qu’il faut partir du principe (un peu sur le principe de gettext) d’une langue par défaut et s’il existe une traduction alors on l’affiche.

        Pourrais-tu écrire un tutoriel vraiment axé "débutant" qui reprend chaque étape une par une, car ce serait plus facile à mettre en place. Tel quel je ne comprends pas bien ce qu’il faut faire...

          Ne visitez pas ce site, il n&#39;y rien
          • 8894
          • 114 Posts
          Bonjour dem,

          En effet, ma présentation n’est pas un tutoriel car je voulais d’abord savoir si ma solution paraissait intéressante à d’autres.
          Mais elle n’a pas déchaîné les foules jusqu’ici ...

          Comme tu l’as relevé, le but de ma solution est d’être plus ergonomique, aussi bien pour l’internaute qui visite le site que pour les éditeurs et traducteurs qui mettent à jour le site. La contre-partie est qu’elle est un peu plus complexe à mettre en place au départ.

          Etant donné qu’il y a au moins une personne intéressée, je pense écrire ce tutoriel. Par-contre, étant occupée en ce moment, je ne sais pas quand ...

          PS: Excellente, ta signature ! On est obligé de cliquer
            • 7010
            • 23 Posts
            Bonjour enidan,

            Quote from: enidan at Apr 12, 2008, 01:59 PM

            PS: Excellente, ta signature ! On est obligé de cliquer

            Merci, mais en fait au début, je l’avais écrit sérieusement dans mes signatures de mails qui parlaient de l’avancée de mon site et en fin de comptes mes copains m’ont dit, "mais si, mais si on a envie d’aller voir !’" et je l’utilise donc maintenant en "détournement marketing"... les gens ayant une nette tendance à la désobéissance.... grin
            En plus je suis étonné que cela me rapporte des backlinks... et des visites...

            Et comme tu as pu le constater mon site n’a vraiment rien d’extraordinaire et je suis encore en plein apprentissage de modx ; et le manque de temps en plus.... undecided


            Bref, merci pour ta réponse et je pense sincèrement que beaucoup plus de gens sont intéressés et devraient le faire savoir. Peut-être n’osent-il pas ou n’ont pas le temps.

            Pour ma part, je suis VRAIMENT intéressé. pour l’instant la solution que j’ai mise en place est la suivante :

            - tant qu’à écrire un article en plusieurs fois pour chaque langue....
            - une install de modx par langue dans chaque sous-répertoire dédié à la langue.
            - traduction des templates des chunks des snippets si besoin dans chaque install.
            - install d’un snippet qui affiche les drapeaux de chaque langue dispo et qui renvoie vers la page correspondante dans la langue choisie. pour l’instant cela ne fait que renvoyer vers la page d’accueil car il faut que je puisse gérer correctement l’absence éventuelle de la page correspondante.
            - gros problème : il faut une arborescence identique avec les mêmes numéros d’articles à chaque fois... pas très pratiques...
            - l’avantage pour l’instant c’est que cela ne modifie en rien l’utilisation et l’install de modx. une solution à la L10n et très séduisante. elle me séduit par la similarité avec dxgettext que j’utilise pour mes devs multi-lingues sous Delphi mais c’est une vrai usine à gaz à mettre en place ; ça m’a découragé vite fait par rapport à ma solution actuelle.

            Solution lourde mais efficace.

            Je surveille ce qui se fait ça m’intéresse vraiment.

            A bientôt.

              Ne visitez pas ce site, il n&#39;y rien
              • 2472
              • 151 Posts
              Sujet intéressant en effet. Je suis également parti de l’exemple du wiki pour construire ma propre solution multi-lingue, ce qui permet de comparer les solutions apportées au différents problèmes rencontrés.

              Il y a par exemple le problème des pages dites ’système’ comme:

              - la page 404
              - la page ’site hors ligne’
              - etc...

              Les id’s de ces pages sont enregistrées au niveau configuration de Modx et ne prennent donc pas en compte le multi-linguisme...

                A thing of beauty is a joy forever ( John Keats)
                • 7010
                • 23 Posts
                Quote from: Avander_be at Apr 14, 2008, 10:06 AM


                Il y a par exemple le problème des pages dites ’système’ comme:

                - la page 404
                - la page ’site hors ligne’
                - etc...

                Les id’s de ces pages sont enregistrées au niveau configuration de Modx et ne prennent donc pas en compte le multi-linguisme...




                C’est vrai, je n’avais pas spécialement pensé à ça puisque dans ma solution ce problème n’existe pas. Mais dans une solution complètement intégrée, la gestion de ces messages doivent absolument être pris en compte.

                  Ne visitez pas ce site, il n&#39;y rien
                  • 5811
                  • 1,717 Posts
                  @enidan
                  En effet, ma présentation n’est pas un tutoriel car je voulais d’abord savoir si ma solution paraissait intéressante à d’autres.
                  Mais elle n’a pas déchaîné les foules jusqu’ici ...
                  Le premier intéressé j’avoue que j’ai manqué de temps pour regarder en détail. Par contre comme je vais bientôt faire un site bilingue Français-allemand pour une association de parrainage, je vais être vite intéressé wink
                    • 6726
                    • 7,075 Posts
                    Merci d’avoir partagé la méthodo, il y a des éléments qui se recoupent avec ce que j’ai bricolé de mon côté, mais en mieux donc je vais regarder ça à tête reposée...
                      .: COO - Commerce Guys - Community Driven Innovation :.


                      MODx est l&#39;outil id
                      • 21026
                      • 53 Posts
                      bonjour,

                      Je me permet de relancer ce sujet car il m’intéresse particulièrement, et comme je suis un petit nouveau sur ce forum et sur MODx, je n’etais pas là au lancement du post.

                      Alors voila, je souhaite faire un site multilangues (3 ou 4), et je suis en train d’étudier un peu les différentes solutions pour arriver à mes fins.

                      J’ai donc regardé la méthode du wiki, et celle d’enidan, et toutes les deux me semblent bien adaptée à une utilisation du type:
                      contenu plutôt fixe, nombre de langues dynamique. C’est à dire pour que l’utilisateur final, puisse traduire son site facilement dans une ou plusieurs langues.

                      Je cherche à faire l’inverse. Je que je recherche c’est faire un site avec un nombre de langues fixe, et que l’utilisateur final, puisse rajouter a ce site un grand nombre de documents facilement. Par facilement, j’entend que le document contienne les données des x langues du sites, plutôt que, comme je l’ai compris dans la méthode du wiki et celle d’enidan, remplir x documents. (et c’est la qu’il ne faut pas hésiter à me dire que je n’ai rien compris si tel est le cas!!! grin )

                      Attention ce n’est qu’un début de réflexion, mais avant d’aller plus loin je préfère vous soumettre la chose plutôt que de foncer dans le mur gaiement!
                      Enfin bref, voici comment je vois les choses:

                      Même architecture que dans les deux méthodes précédemment cités, à savoir un répertoire par langues.
                      Toute la partie statique du site est dupliqué et traduite, pour chaque langue.
                      Les documents que l’utilisateur final, crée, ou modifie, ne sont eux présent que dans le répertoire de la langue de référence, et contiennent les textes des x langues via x TV.
                      Ils sont appelé via ditto, dans un répertoire statique (donc dupliqué traduit). L’appel à ditto varie selon la langue, pour afficher le contenu de la TV du document dynamique qui correspond à la langue voulue. smiley
                      L’utilisateur final, n’aurais accès, qu’au répertoire de référence, pour pouvoir ajouter ou modifier les documents dynamique qu’il remplirais dans toutes les langues du site.

                      Comme je ne suis pas sur d’être très clair undecided, je vais me hasarder à vous faire un petit schéma. smiley

                      depart (1)
                      fr
                      |-> Bienvenue (2)
                      | |->histoire (doc appelant via ditto les données de "document histoire" en francais)(3)
                      | |->document histoire (contenant toute les traductions via des TVs)(25)
                      en
                      |-> Welcome (4)
                      | |->history (doc appelant via ditto les données de "document histoire" en anglais)(5)
                      | |->ce repertoire est vide


                      Alors... Qu’en pensez vous? bonne idée, hérésie??

                      J’attends vos critiques. shocked
                      mais soyez sympa je débute sous MODx... wink