Bonjour,
Je maintiens 2 sites. les deux sont identiques, l'un est en anglais, l'autre en français. Chaque page française possède son doublon anglais dans un autre dossier (un dossier /FR/ et un dossier /EN/).
L'utilisateur a la possibilité de passer d'une langue à l'autre à l'aide d'un simple lien qui pointe vers une page ne contenant que le script qui suit.
2 type d'exceptions sont gérée pour lesquels on ne va pas faire de redirection:
la premiere est lorsqu'il y a une requete en URL (un ? après le nom de la page), la seconde, celle qui me pose problème, est la gestion des pages 404 (si jamais le doublon d'une des 2 langues n'existe pas par exemple on redirige sur google.com).
Je ne suis pas un pro du code et doit avoué que ceci est un assemblage de chose glanné ci et là sur les forums mais fonctionne à merveille (a part ce 404)
Le code:
Je ne sais pas ou appelé la fonction Rediriger() ou mieux: pouvoir la supprimer et l'intégrer comme une verification supplémentaire avant de passer d'une page a l'autre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91 <!-- //Recupere l'URL au complet de la page precedente var URL = document.referrer; //Cherche différentes valeurs dans l'URL var PosFR = URL.indexOf("/FR/"); var PosPI = URL.indexOf("?"); //REDIRECTION SI ADRESSE NON VALIDE (2 CAS) //REQUETE (REDIRECTION) //Si le site est en français (Si l'URL contient "/FR/") if (PosFR != -1){ //Si l'URL contient "?" (une requête) if (PosPI != -1){ alert ("Contenu non traduisible"); URL = "http://www.google.com"; //redirige window.location=(URL); } } //Si le site est en anglais (Si l'URL contient "/EN/") if (PosFR == -1){ //Si l'URL contient "?" (une requête) if (PosPI != -1){ alert ("Non translatable content"); URL = "http://www.google.com"; //redirige window.location=(URL); } } ////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////PARTIE QUI POSE PROBLÈME///////////////////////////////////////////////////////// //404 (REDIRECTION) //Lis les entêtes function getXhr(){ var xhr = null; if(window.XMLHttpRequest){ // Firefox et autres xhr = new XMLHttpRequest(); }else if(window.ActiveXObject){ // Internet Explorer try { xhr = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { xhr = new ActiveXObject("Microsoft.XMLHTTP"); } }else{ // XMLHttpRequest non supporté par le navigateur alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); xhr = false; } return xhr; } //teste si la page existe avant ouverture function Rediriger(URL){ var xhr = getXhr(); //On défini ce qu'on va faire quand on aura la réponse xhr.onreadystatechange = function(){ // Si le serveur a repondu et que la page n'existe pas if(xhr.readyState == 4 && xhr.status == 404){ window.location.href='http://www.google.com'; }else{ window.location.href = URL; } } xhr.open("GET",URL,true); xhr.send(null); } //////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////// //TRADUCTION //Si l'URL contient "/FR/" if (PosFR != -1){ //remplace "/FR/" par "/EN/" (case insensitive) URL=URL.replace( new RegExp( "/FR/", "i" ), "/EN/" ); //redirige window.location=(URL); }else{ //sinon remplace "/EN/" par "/FR/" (case insensitive) URL=URL.replace( new RegExp( "/EN/", "i" ), "/FR/" ); //redirige window.location=(URL); } -->
Merci de votre aide
Partager