Rendre un site multilingue avec EMLH

Date 02/05/2008 | Sujet : Modules

Récemment, j'ai été amené à réaliser un site multilingue français / anglais. J'ai donc cherché la meilleure méthode parmi celles existantes, et mon choix s'est porté sur EMLH de GiJoe. Elle permet avec un seule ligne de code dans le mainfile.php d'activer la traduction du contenu du site à la volée.

Je veux ainsi dans cet article rassembler les éléments glânés sur le net et qui m'ont permis d'arriver à cette solution.

Téléchargement

Téléchargez sur le site de GiJoe le fichier easiestml.php et copiez le dans le dossier racine_xoops/include.

Modification du fichier mainfile.php

Editer le mainfile.php et rajouter la ligne

require XOOPS_ROOT_PATH.'/include/easiestml.php' //


juste avant
// Database
    // Choose the database to be used
    
define('XOOPS_DB_TYPE''mysql');

Editer le fichier easiestml.php

Corriger les premières lignes de la façon suivante afin de définir l'anglais et le francais comme langues disponibles :

//define('EASIESTML_LANGS','xlang:en,xlang:fr'); // This is a sample of long pattern against tag misunderstanding [xlang:fr]english[/xlang:fr]
define('EASIESTML_LANGS','en,fr'); // [en]english[/en]  [fr]français[/fr] common

// list the language images separated with comma
define('EASIESTML_LANGIMAGES','images/english.png,images/french.png');

// list the language names separated with comma (these will be alt of <img>)
define('EASIESTML_LANGNAMES','in english,in french');

// list language - accept_chaset patterns (perl regex) separated with comma
define('EASIESTML_ACCEPT_CHARSET_REGEXES',',/shift_jis/i');

// list language - accept_language patterns (perl regex) separated with comma
define('EASIESTML_ACCEPT_LANGUAGE_REGEXES','/^en/,/^fr/');

// charset in Content-Type separated with comma (only for fastestcache)
define('EASIESTML_CHARSETS','ISO-8859-1,ISO-8859-1');

// tag name for language image  (default [mlimg]. don't include specialchars)
define('EASIESTML_IMAGETAG','mlimg');

// make regular expression which disallows language tags to cross it
define('EASIESTML_NEVERCROSSREGEX','/</table>/');

// the life time of language selection stored in cookie
define('EASIESTML_COOKIELIFETIME',365*86400);

// default language
define('EASIESTML_DEFAULT_LANG',1);

Edition du fichier theme.html

Editer son fichier thème et rajouter le tag [mlimg] à l'endroit où l'on souhaite faire apparaitre les petits drapeaux de changement de langue. (dans language.html pour ceux qui utilisent morphogenesis 2.0


<div id="xo-language">
[
mlimg]
</
div>

Et le tour est joué.

Et vous pouvez saisir votre contenu (articles, titres de blocs ...) avec les balises

  • [en]Ce qui doit apparaitre en anglais[/en]
  • [fr]Et en langue de molière[/fr]

La partie commune

Petite cerise sur le gâteau

Avec la méthode précédente, il reste le contenu des modules à traduire. On peut faire appel dans ce cas là aux fichiers de langue présents à la livraison des modules.

Ajouter le contenu suivant dans le fichier common.php présent dans le répertoire xoops_path/include (juste après les appels à la config du CMS) :

// ################# Load Config Settings ##############
    
$config_handler =& xoops_gethandler('config');
    
$xoopsConfig =& $config_handler->getConfigsByCat(XOOPS_CONF);
// #################### Easiest ML by Gijoe #################
$langs=array('fr'=>'french','en' =>'english');

    if (isset( 
$_GET['easiestml_lang'] ) && isset($_COOKIE['easiestml_lang'])){
        if (
in_array($_GET['easiestml_lang'],$easiestml_langs)){
            
$xoopsConfig['language'] = $langs[$_GET['easiestml_lang']];
        }
    }elseif(isset(
$_COOKIE['easiestml_lang'])){
        if (
in_array($_COOKIE['easiestml_lang'],$easiestml_langs)){
            
$xoopsConfig['language'] = $langs[$_COOKIE['easiestml_lang']];
        }
    }elseif(isset(
$_GET['easiestml_lang'])){
        if (
in_array($_GET['easiestml_lang'],$easiestml_langs)){
            
$xoopsConfig['language'] = $langs[$_GET['easiestml_lang']];
        }
    }

Ce code fonctionne très bien quand on n'utilise pas le cache des modules.
En espérant vous avoir aidé




Cet article provient de Communauté Francophone des Utilisateurs de Xoops
https://www.frxoops.org

L'adresse de cet article est :
https://www.frxoops.org/modules/news/article.php?storyid=1485