Fork me on GitHub

Rendre un site multilingue avec EMLH

200802
Mai
  nicripeur Modules 6325
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é

Note: 9.00 (2 votes) - Noter cet article -

Partager Twitter Partagez cette article sur GG+
Format imprimable Envoyer cet article Ă  un ami
Les commentaires appartiennent Ă  leurs auteurs. Nous ne sommes pas responsables de leur contenu.

Aspirant
Inscrit le: 29/11/2004
De:
Contributions: 79
olico PostĂ© le: 09/09/2009 10:14  Mis Ă  jour: 09/09/2009 10:24
 Re: Rendre un site multilingue avec EMLH
Bonjour j'ai trouvé une méthode alternative à la fonction "cerise sur le gâteau".
Ce hack permet donc de changer la langue du système et des modules.

Voici l'adresse oĂą se trouve le hack original : ici

Voici le hack adapté à mes besoins, dans le fichier include/commom.php :
après :
// ################# Include version info file ##############
include_once XOOPS_ROOT_PATH "/include/version.php";

// for older versions...will be DEPRECATED!
$xoopsConfig['xoops_url'] = XOOPS_URL;
$xoopsConfig['root_path'] = XOOPS_ROOT_PATH "/";


insérer :
// TheRplima Hack, translate the system and module language too
// http://xoops.peak.ne.jp/md/d3forum/index.php?topic_id=2255
if (isset( $_GET['easiestml_lang'] ) && isset($_COOKIE['easiestml_lang'])){
switch (
$_GET['easiestml_lang']){
case 
'fr':$xoopsConfig['language'] = 'french'; break;
case 
'en':$xoopsConfig['language'] = 'english'; break;
case 
'de':$xoopsConfig['language'] = 'german'; break;
case 
'sp':$xoopsConfig['language'] = 'spanish'; break;
case 
'it':$xoopsConfig['language'] = 'italian'; break;
}
}elseif(isset(
$_COOKIE['easiestml_lang'])){
switch (
$_COOKIE['easiestml_lang']){
case 
'fr':$xoopsConfig['language'] = 'french'; break;
case 
'en':$xoopsConfig['language'] = 'english'; break;
case 
'de':$xoopsConfig['language'] = 'german'; break;
case 
'sp':$xoopsConfig['language'] = 'spanish'; break;
case 
'it':$xoopsConfig['language'] = 'italian'; break;
}
}elseif(isset(
$_GET['easiestml_lang'])){
switch (
$_GET['easiestml_lang']){
case 
'fr':$xoopsConfig['language'] = 'french'; break;
case 
'en':$xoopsConfig['language'] = 'english'; break;
case 
'de':$xoopsConfig['language'] = 'german'; break;
case 
'sp':$xoopsConfig['language'] = 'spanish'; break;
case 
'it':$xoopsConfig['language'] = 'italian'; break;
}
}
// END HACK TheRplima


Avant :
// #################### Include site-wide lang file ##################
if ( !@include_once XOOPS_ROOT_PATH "/language/" $xoopsConfig['language'] . "/global.php" ) {
    include_once 
XOOPS_ROOT_PATH "/language/english/global.php";
}


Ce hack fonctionne parfaitement, toutefois, il y a incompatibilité avec les modules Smartfactory (smartpartner et smartsection),
dans certains cas on se trouve avec le syndrĂ´me de la page blanche.

N.B. lorsqu'il n'y avait pas de dossier pour les 5 langues que j'utilise, j'ai dupliqué le dossier english que j'ai renommé german, italian ou spanish afin d'obtenir pour chaque module le dossier langue avec les 5 langues que j'utilise.

P.S. il ne manque qu'une fonction pour désactiver le multilingue dans la partie administration de xoops afin de revenir à la langue par défaut.
--
olico

Répons(s) Auteur Posté le
 Re: Rendre un site multilingue avec EMLH olico 22/10/2009 14:57
 Re: Rendre un site multilingue avec EMLH olico 23/10/2009 08:37
    Re: Rendre un site multilingue avec EMLH olico 23/10/2009 09:46
      Re: Rendre un site multilingue avec EMLH malipalo 20/08/2011 12:35
        Re: Rendre un site multilingue avec EMLH Kris 20/08/2011 12:42
Propulsé avec XOOPS | Graphisme adapté par Tatane, Grosdunord, Montuy337513

15 Personne(s) en ligne (2 Personne(s) connectée(s) sur Articles) | Utilisateur(s): 0 | Invité(s): 15 | Plus ...