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

    Je travaille sur un petit site multilingue structuré de la sorte
    insina.com/fr/
    insina.com/en/
    J’ai installé MODx sur
    insina.com/modx/
    Sur cette dernière page il y a des variables à localiser ([txt.link_home] par exemple) soit en français, soit en anglais, soit etc. Avez-vous une suggestions sur la stratégie à adopter ?
      http://insina.com - Etudier le chinois en Chine - Study chinese in China
      • 1876
      • 835 Posts
      Bonjour,

      PAs trop de temps aujourd’hui mais regarde déjà http://modxcms.com/forums/index.php/topic,6.0.html

      Aour
        • 9426
        • 14 Posts
        Effectivement dans ce fil il y a un message qui décrit une façon d’implémenter le multi-linguisme :

        http://modxcms.com/forums/index.php/topic,6.msg7441.html#msg7441

        Pour chaque bout de texte à traduire il faut donc un ’chunk’ correspondant dans chaque langue du site. Pour l’instant tout le texte de mon site se trouve dans un seul fichier (c’est plus facile pour d’éventuels traducteurs), et je génère le site à partir de ce fichier. Dans le cas des chunks, il faudrait que le traducteur accède à l’interface d’administration et traduise les chunks un à un. Possible mais moins pratique.

        Si qqun a des suggestions (y compris théoriques) ...
          http://insina.com - Etudier le chinois en Chine - Study chinese in China
          • 9426
          • 14 Posts
          Suite ...

          Utiliser des chunks pour chaque string à localiser est possible mais pas très pratique (bcp de petits chunks, un pour chaque langue). À la place j’ai mis les string dans un fichier unique placé à la base du site: fr.lang.php.

          Pour faire un site multi-lingue, j’ai donc préparé
          - un template
          - un fichier fr.lang.php contenant tout le texte dans un tableau
          - les pages du site dans un folder fr, basées sur le template
          - un snippet qui charge le fichier langue
          - un snippet qui fournit un texte localisé à partir de son id


          Au début du template général du site j’exécute le snippet qui charge le fichier :

          // chemin vers la base du site
          $basePath = $modx->config['base_path'];
          
          // langue du document, déterminée par le début de son arborescence
          $lang = getRootAlias($modx);
          
          //chargement du fichier correspondant à la langue
          $filelang = $basePath.'/'.$lang.'.lang.php';
          if (file_exists($filelang)) include($filelang);
          
          //renvoie l'alias du premier folder
          //par exemple si le document actuel est /fr/oui/non.html
          //la fonction renverra 'fr'
          function getRootAlias($modx) {
            $parentId=$modx->documentObject['id'];
            do {
              $thisId=$parentId;
              // Get published or unpublished parent
              $thisDoc=$modx->getDocument($thisId,'parent',1,0) ? $modx->getDocument($thisId,'parent',1,0) : $modx->getDocument($thisId,'parent',0,0);
              $parentId = $thisDoc['parent'];
            } while ($parentId!=0);
            $thisDoc=$modx->getDocument($thisId);
            return $thisDoc['alias'];
            //return $thisId;
          }
          


          Ensuite chaque fois que j’ai besoin d’afficher un string j’appelle le snippet ’lang’ de la sorte [[lang?id=iddutexte]]

          //$GLOBALS['insina'] est le tableau contenant le texte du site 
          //chargé lors du premier snippet
          return $GLOBALS['insina'][$id];
          


          Une fois que la version française fonctionne bien, je n’ai plus qu’à ajouter le fichier en.lang.php contenant la version anglaise, copier le folder ’fr’ dans l’administration MODx et renommer ce folder ’en’, j’ai aussitôt une version anglaise fonctionnelle.

          Pour rediriger automatiquement le visiteur vers sa langue préférée on peut utiliser un document dans la racine du site appelant le snippet ’redirect’

            $lang = getenv('HTTP_ACCEPT_LANGUAGE');
            switch (substr($lang,0,2)) {
            	case 'fr':
            	  header("Location: /fr/");
            	  break;
            	case 'en':
            	default:
            	  header("Location: /en/");
            	  break;
            }
          


          voir résultat: http://insina.com

          ... si vous avez des question ou des suggestions ... il y a sûrement moyen d’améliorer cette procédure (à propos quelles sont les prochaines évolutions prévues de modx pour le multi-linguisme ?)
            http://insina.com - Etudier le chinois en Chine - Study chinese in China
            • 2472
            • 151 Posts
            C’est une solution pour tout les labels fixe... et pour le contenu ( les notes dans un blog par exemple) tu fais comment, une ’section’ par langue et une note dans chaque section adhoc?

              A thing of beauty is a joy forever ( John Keats)
              • 9426
              • 14 Posts
              Comme mon contenu est essentiellement fixe et réutilisé sur plusieurs pages, j’ai tout mis dans les fichiers langue.

              Pour des billets de blog je ne vois pas d’autre solution que ce que tu suggères, un billet dans chaque ’section’ de langue, le contenu du billet est alors édité directement via modx.
                http://insina.com - Etudier le chinois en Chine - Study chinese in China