Multi-langues

0/5 (2 avis)

Vue 6 754 fois - Téléchargée 435 fois

Description

Ce code permet, dans un site contenant plusieurs langues, de passer d'une langue à une autre. Le même code est utilisé dans toutes les pages, et ne requiert que la configuration initiale d'un fichier '.js' !

Au lieu de créer tous les liens à la main pour relier les bonnes pages à la bonne langue, on utilise un simple script : à chaque appel de la fonction, on stocke le chemin complet de la page en cours, puis on en extrait tout le chemin inutile, pour ne garder que le nom de base de nos fichiers ; il ne reste plus qu'à créer un lien par langue pour accoler ("le chemin caractéristique d'une langue" + "le nom de base du fichier") !

Vous pouvez utiliser ce code quelque soit la configuration de vos pages "multi-langues" :

- soit vos pages internet sont toutes dans le même répertoire (racine par exemple)
- soit vos pages internet sont dans des répertoires "fr", "en", etc...

Voilà, pour ce post j'ai choisi la facilité pour mon exemple, deux fichiers appelés "fr_index.htm" et "en_index.htm", plus le fichier appelé "lang.js"... Ces trois fichiers dans le même répertoire...

Source / Exemple :


<!-- CODE A INSERER DANS LE FICHIER .js -->

function LangEn()
{window.location.href="en"+window.location.href.substring(window.location.href.lastIndexOf("_"))} // Config. initiale

function LangFr()
{window.location.href="fr"+window.location.href.substring(window.location.href.lastIndexOf("_"))} // Config. initiale

<!-- CODE DE DEPART A INSERER DANS LES DEUX PAGES .htm -->

<HTML><HEAD><SCRIPT SRC='lang.js'></SCRIPT>
</HEAD><BODY>

[...]<BR><BR>

[ <A HREF='javascript:LangFr()'>Version française</A> ] *************** [ <A HREF='javascript:LangEn()'>English version</A> ]
</BODY></HTML>

Conclusion :


Trois fonctions combinées :

window.location.href : permet d'afficher le chemin complet de la page en cours
chaîne.substring(position) : permet de découper une chaîne de caractères à partir d'une position choisie dans cette chaîne
chaîne.LastIndexOf("symbole") : permet de trouver la position de la dernière occurence d'un symbole donné dans une chaîne

Une configuration dans un même répertoire (chemin du style : "//racine/fr_index.htm") donnera, pour la fonction LangEn(), une syntaxe de ce style :
window.location.href="en"+window.location.href.substring(window.location.href.lastIndexOf("_"))

Une configuration dans des répertoires "fr", "en",... (chemin du style : "//racine/fr/index.htm") a créé un bug rapporté par "marmotte86", car le script précédent ne supporte pas les sous-niveaux... Il faudra plutôt créer une syntaxe de ce style, pour la fonction LangEn() - en modifiant le nom du répertoire "racine" + l'indice de décalage (selon la longueur de ce répertoire) :
window.location.href=window.location.href.substring(0,window.location.href.indexOf("racine/")+7)+"en"+window.location.href.substring(window.location.href.indexOf("racine/")+9)

Une alternative à ce script un peu lourd consiste à utiliser la fonction "replace" tout simplement, celà supporte tous les niveaux de profondeur d'un site mais ne fonctionne qu'avec deux langues (on ne peut remplacer qu'une seule sous-chaîne par une autre je crois...) ; celà donnera une syntaxe de ce style pour la fonction LangEn() :
window.location.href=window.location.href.replace("/fr/","/en/")

Ca marche sur Internet Explorer et Mozilla Firefox...

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
5
Date d'inscription
dimanche 10 novembre 2002
Statut
Membre
Dernière intervention
8 août 2005

Hum, en effet je viens de voir ce problème, j'espère avoir pu le régler ; comme je ne suis pas programmeur mais plutôt le "prince des bidouilleurs" le code doit être un peu lourd, mais a au moins l'utilité de marcher apparemment en local comme sur le net...

Pour trouver le nombre de répertoires à remonter, après trois heures de recherches j'ai essayé de modifier le script en me basant sur le seul répertoire qui ne change jamais - la racine :

"url avant la racine" + "en" + "url après la racine + répertoire en/"...

A condition que le site soit du style //racine/en/..., celà donnerait :

function LangEn()
{window.location.href=window.location.href.substring(0,window.location.href.indexOf("racine/")+7)+"en"+window.location.href.substring(window.location.href.indexOf("racine/")+9)} // Config. initiale

En configurant la "racine" + "décalage" suivant le nombre de caractères de cette racine, pour un site qui a la même architecture que le tien celà semble fonctionner à tous les niveaux... Dis-moi quoi ! ;)
Messages postés
34
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
9 août 2007

Un petit problème... si j'ai une page qui se trouve a l'adresse :
//racine/en/repertoire1/page.html
si on met ce qui est dit dans la description, le script devrait me transformer cette adresse pour du francais en :
//racine/en/fr/page.html
et cette page n'existe pas !
Comment réussir à trouver le nombre de répertoires à remonter ?

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.