Fork me on GitHub

Rendre un site multilingue avec EMLH

200802
Mai
  nicripeur Modules 4888
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 Créer un fichier PDF à partir de cet article
Les commentaires appartiennent à leurs auteurs. Nous ne sommes pas responsables de leur contenu.
Xoops accro
Inscrit le: 15/07/2004
De:
Contributions: 4771
blueteen Post√© le: 14/05/2008 08:20  Mis √† jour: 14/05/2008 08:20
 Re: Rendre un site multilingue avec EMLH
Merci pour le temps pris pour la rédaction de cette explication !
Régulier
Inscrit le: 29/03/2007
De:
Contributions: 343
flaggada Post√© le: 15/05/2008 14:57  Mis √† jour: 15/05/2008 14:57
 Re: Rendre un site multilingue avec EMLH
Merci pour le mode d'emploi :)
Il y a juste la cerise sur le gateau qui me plante le site.
Donc à défaut ce sera sans la cerise
Régulier
Inscrit le: 22/08/2006
De:
Contributions: 186
nicripeur Post√© le: 15/05/2008 15:55  Mis √† jour: 15/05/2008 15:55
 Re: Rendre un site multilingue avec EMLH
ton site plante ?

peut être as tu rajouté tout le code que je présentais ? il faut

apres ceci :
// ################# Load Config Settings ##############
    
$config_handler =& xoops_gethandler('config');
    
$xoopsConfig =& $config_handler->getConfigsByCat(XOOPS_CONF);

rajouter cela :
// #################### 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']];
        }
    }


Bien s√Ľr , il faut que chaque package langue existe pour chaque module

Ca fonctionne sur 2.0.18 et aussi avec le nouveau plugin de Dugris sur l'urlRewriting
Régulier
Inscrit le: 29/03/2007
De:
Contributions: 343
flaggada Post√© le: 15/05/2008 22:11  Mis √† jour: 15/05/2008 22:11
 Re: Rendre un site multilingue avec EMLH
Merci la cerise marche :)
C'était un module (yogurt) dont les fichiers de traduction ne marchaient pas bien. (vu en debug mode).
Maintenant au travail pour changer les titres des blocs (je croyais que ça se faisait aussi automatiquement)
Régulier
Inscrit le: 22/05/2008
De:
Contributions: 172
habib66 Post√© le: 28/05/2008 19:42  Mis √† jour: 28/05/2008 19:42
 Re: Rendre un site multilingue avec EMLH
J'ai fait exactement comme le super tuto (tres bien expliqué);Mais ca ne marche pas...pourtant j'ai tout verifié.
Régulier
Inscrit le: 22/08/2006
De:
Contributions: 186
nicripeur Post√© le: 30/05/2008 10:55  Mis √† jour: 30/05/2008 10:55
 Re: Rendre un site multilingue avec EMLH
Qu'est ce qui ne marche pas ? le remplacement des balises de langue , ou le changement de langue de chaque module (la cerise ...) ?

ouvre un post sur le forum
Régulier
Inscrit le: 10/10/2007
De: Yaoundé - CAMEROUN
Contributions: 261
leozald Post√© le: 04/10/2008 15:07  Mis √† jour: 04/10/2008 15:07
 Re: Rendre un site multilingue avec EMLH
Salut les gars!

Merci pour le hack EMLH de GIJOE et la cerise sur le g√Ęteau.
Je suis entrain d'utiliser EMLH dans un site fait avec xoops 2.3 et j'ai juste un problème, les caractères avec accents é è à ' n'apparaissent pas convenablement.
Par exemple: j'obtient ceci:
électrique au lieu de ceci électrique
Comment corriger celà??

Merci
Régulier
Inscrit le: 10/10/2007
De: Yaoundé - CAMEROUN
Contributions: 261
leozald Post√© le: 04/10/2008 15:26  Mis √† jour: 04/10/2008 15:26
 Re: Rendre un site multilingue avec EMLH
Salut,

Je crois avoir résolu le problème, je devais utiliser les codes html correspondants à é è à ...

Aspirant
Inscrit le: 31/07/2004
De:
Contributions: 26
rallierst Post√© le: 25/11/2008 11:25  Mis √† jour: 25/11/2008 11:25
 Re: Rendre un site multilingue avec EMLH
Bonjour,

Comment faire dans mes pages créés avec myiframe pour intégrer les balises de langues [fr][/fr][en][/en] ces dernières restant inactives et ainsi s'affichant comme du texte brut.
Y a t-il une balise à ajouter dons le head de mes pages ?

Stéphane
Semi pro
Inscrit le: 04/08/2005
De: Quelque part dans les étoiles...
Contributions: 1121
xmouse Post√© le: 25/11/2008 13:47  Mis √† jour: 25/11/2008 13:47
 Re: Rendre un site multilingue avec EMLH
Salut Rallierst,

Il faut que tu utilises le forum pour poser tes questions et non pas les commentaires... :)

Si un Admin peut faire le nécessaire... Merci ;)
Aspirant
Inscrit le: 29/11/2004
De:
Contributions: 79
olico Post√© le: 02/09/2009 17:48  Mis √† jour: 02/09/2009 17:52
 Re: Rendre un site multilingue avec EMLH
Bonjour,
la cerise sur le g√Ęteau ne fonctionne pas chez moi, j'ai pourtant bien fait attention aux instructions, de m√™me que celles des commentaires.

voici le code que j'ai collé à l'emplacement choisi :
//¬†####################¬†Easiest¬†ML¬†by¬†Gijoe¬†################# 
$langs=array('fr'=>'french','en' =>'english','de'=>'german','sp' =>'spanish','it'=>'italian');
   
 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']]; 
        
    }

je l'ai adapté à mon site qui nécessite 5 langues.

Le site renvoie une page blanche après installation du code et revient à la normale dès que je l'enlève.

N.B.1 certains de mes modules n'ont pas les dossiers de langue pour les 5 langues.

N.B.2 J'utilise xoops 2.3.3
--
olico
Xoops accro
Inscrit le: 20/02/2008
De: Belgium
Contributions: 2700
Ghia Post√© le: 04/09/2009 13:53  Mis √† jour: 04/09/2009 13:53
 Re: Rendre un site multilingue avec EMLH
Citation :
certains de mes modules n'ont pas les dossiers de langue pour les 5 langues.
Copiez english to the missing langages.
Certaines modules n'ont pas le 'fallback' automatique vers anglais et bloques quand le dossier de langage n'existe pas.
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
Aspirant
Inscrit le: 29/11/2004
De:
Contributions: 79
olico Post√© le: 22/10/2009 14:57  Mis √† jour: 23/10/2009 08:29
 Re: Rendre un site multilingue avec EMLH
Bonjour,
je crois avoir trouvé la source du problème de la page blanche.
En effet lorsque je visite le site en tant qu'anonyme, j'accède à la version espagnole du site sans aucun problème.
En revanche lorsque je suis connecté en tant qu'administrateur et que je bascule mon site en espagnol, j'ai le retour de la page blanche.

Je suis confronté à un problème étrange de comportement de xoops.
En effet, lorsque je charge la traduction espagnole du site, l'adresse du site se complète par :
?easiestml_lang=sp

exemple :
http://www.harmonieregioncentre.com/m ... dex.php?easiestml_lang=sp
Si je visite le site en mode administrateur, la même adresse charge une page blanche.
En revanche si je remplace "sp" par "es" à la fin du lien la page en espagnol se charge parfaitement.
exemple :
http://www.harmonieregioncentre.com/m ... dex.php?easiestml_lang=es

Que faire?

J'ai besoin de votre aide.
Merci de votre attention.
--
olico
Aspirant
Inscrit le: 29/11/2004
De:
Contributions: 79
olico Post√© le: 23/10/2009 08:37  Mis √† jour: 23/10/2009 09:22
 Re: Rendre un site multilingue avec EMLH
Bonjour,
c'est ce Hack "cerise sur le g√Ęteau" que j'ai trouv√© "TheRplima Hack" qui pose probl√®me uniquement avec la langue spanish.

En effet, si je met ce code dans le hack TheRplima :
case 'sp':$xoopsConfig['language'] = 'spanish'; break;

l'adresse de mon site complété par "/index.php?easiestml_lang=sp" me donne une page blanche (en remplaçant sp par es la page s'affiche correctement)

si je met le code :
case 'es':$xoopsConfig['language'] = 'spanish'; break;

l'adresse de mon site complété par "/index.php?easiestml_lang=es" me donne une page blanche (en remplaçant es par sp la page s'affiche correctement).

Je n'arrive pas √† trouver pourquoi et o√Ļ la langue "spanish" est d√©clar√©e sous deux variables diff√©rentes au m√™me moment (sp et es).

Si vous avez une idée, je sens que je touche au but.
Merci de votre attention.

N.B. j'ai oublié de rappeler que le problème de la page blanche se pose uniquement lorsque je suis loggé sur le site.
En effet, si je visite le site en anonyme, le site fonctionne parfaitement avec"sp" et "es"
Très étrange, non?
--
olico
Aspirant
Inscrit le: 29/11/2004
De:
Contributions: 79
olico Post√© le: 23/10/2009 09:46  Mis √† jour: 23/10/2009 09:46
 Re: Rendre un site multilingue avec EMLH
Bonjour,
je viens de trouver l'origine du problème comme un grand :
c'est le pack de langue "spanish" du module smarsection qui posait problème.
en le supprimant, tout marche parfaitement.
Ouf!
--
Olico
Newbie
Inscrit le: 27/07/2010
De: Genève
Contributions: 6
malipalo Post√© le: 20/08/2011 12:35  Mis √† jour: 20/08/2011 12:35
 Re: Rendre un site multilingue avec EMLH
Bonjour à tous,

Tout d'abord je dois vous remercier pour ce magnifique module, j'ai longtemps cherché une solution fiable pour rendre un site Xoops multilingue.

Un site, une base, un domaine : c'est vraiment mieux pour les modifications que deux sites un français un anglais etc.

Il me semble voir trouvé un bug, ou alors j'ai mal paramétré quelque chose, je m'explique :

J'utilise votre module sur :
XC Legacy Version : XOOPS Cube Legacy 2.2

Il fonctionne parfaitement.

Mais ce matin en effectuant mes traductions [en]..[/en], j'ai remarqué dans le coin de l'écran en haut à gauche.
design[/fr]
qui n'a rien à faire là.

Je traduisais le sujet d'un contenu avec
[fr]conception[/fr][en]design[/en]

la page du site en anglais avec l'erreur :
http://maison-parents.ch/modules/cour ... t_id=18&easiestml_lang=en

La même page du site en français mais il n'y a pas d'erreur :
http://maison-parents.ch/modules/cour ... t_id=18&easiestml_lang=fr

Est ce que je suis confronté à un bug ou c'est parce que j'utilise XOOPS Cube Legacy 2.2 au lieu d'Xoops ?

Je ne comprends pas cette erreur, j'ai cherché dans le code PHP sans trouver.

Si vous pouvez vous m'aidez sur ce problème s.v.p.
Je vous en serais éternellement reconnaissant. Car c'est le site d'un de mes clients pour lequel j'effectue la traduction de ces pages en anglais, et la je cale sur ce problème, je ne trouve pas la solution.

Laurent PERRET / Genève
malipalo@bluewin.ch
Supporter Xoops
Inscrit le: 09/01/2005
De: Breizh
Contributions: 16966
Kris Post√© le: 20/08/2011 12:42  Mis √† jour: 20/08/2011 12:42
 Re: Rendre un site multilingue avec EMLH
Bonjour,

Désolé, mais ce site est un support pour le projet XOOPS et non XOOPS Cube Legacy 2.2
De plus il y a un forum pour les questions et non l'utilisation des commentaires
Je doute que tu aies des réponses à ton problème sur ce site, je t'invite à poster sur le site de support de XoopsCube

@micalement
Newbie
Inscrit le: 01/03/2010
De: Montréal (Qc), Canada
Contributions: 16
vpgriac Post√© le: 01/09/2011 19:53  Mis √† jour: 01/09/2011 19:53
 Re: Rendre un site multilingue avec EMLH
Bonjour,

Etant novice dans le domaine, j'ai pu ajouter les codes cités ci-haut pour traduire le site.

J'ai deux questions:

1) Les drapeaux ne s'affichent pas, je vois simplemement french, english l√† o√Ļ je veux les voir s'afficher. Est-ce qu'il y a une manipulation sp√©ciale pour cela?

2) Comment faire maintenant pour que la traduction anglaise s'affiche par exemple? Mon site est en français, je veux le rendre billingue.

3) Merci d'avance
Supporter Xoops
Inscrit le: 09/01/2005
De: Breizh
Contributions: 16966
Kris Post√© le: 01/09/2011 23:41  Mis √† jour: 01/09/2011 23:41
 Re: Rendre un site multilingue avec EMLH
@vpgriac : peux tu s'il te pla√ģt poster ta question sur le forum et non sur les commentaires - Merci d'avance
Régulier
Inscrit le: 22/08/2006
De:
Contributions: 186
nicripeur Post√© le: 14/02/2013 16:14  Mis √† jour: 14/02/2013 16:14
 Re: Rendre un site multilingue avec EMLH
Hello,

Je ne peux plus éditer mon article ;)

Je voulais ajouter une précision, que certains contenus sont retors vis a vis du balisage EMLH, à une inclusion dans les balises [fr][/fr]

Par exemple, du contenu youtube placé entre ces balises va faire planter le parseur syntaxique et provoquer l'affichage de l'ensemble des langues en même temps.

il faut donc construire ses blocs de texte pour chaque langue autour du contenu video et non pas essayer de gérer une section [][/] par langue avec le contneu youtube au milieu

Nota : ca peut plante aussi avec des caractères accentués non échappés :)
Propulsé avec XOOPS | Graphisme adapté par Tatane, Grosdunord, Montuy337513

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