AJAX - sitio multilengua PHP y AJAX

   
Vista:

sitio multilengua PHP y AJAX

Publicado por emeotero (3 intervenciones) el 15/11/2011 17:47:17
Hola,
primeramente comentar q tengo una pagina en PHP con varias secciones a la q para evitar la re-carga de paginas le he metido un script ajax. esas paginas me las carga en un div en concreto. el problema lo tengo al hacerla ahora multilenguaje. en principio el idioma me funciona sin problema pero cuando quiero hacer el cambio de idioma en una pagina en concreto como tengo un ahref al index de la pagina me recarga la pagina principal, pero no la q estaba, no se si me he explicado bien.
1
2
3
4
5
6
<div id="lenguage">
<div class="en"><a href="index.php?lang=en"><img src="images/en.gif" /></a></div>
<div class="es"><a href="index.php?lang=es"><img src="images/es.gif" /></a></div>
<div class="pt"><a href="index.php?lang=pt"><img src="images/pt.gif" /></a></div>
</div>
<div><span class="text07"><a href="#" onclick="cargarContenido('contenidos/proyecto.php')"/><?php echo $lang['text_3']; ?></a></span></div>


no se como puedo pasar a ese index.php?lang=en un valor o parametro o lo q sea para q me respete la pagina.
script ajax por si alguien le sirve de Gregory Wild-Smith
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
function sack(file) {
	this.xmlhttp = null;
 
	this.resetData = function() {
		this.method = "POST";
  		this.queryStringSeparator = "?";
		this.argumentSeparator = "&";
		this.URLString = "";
		this.encodeURIString = true;
  		this.execute = false;
  		this.element = null;
		this.elementObj = null;
		this.requestFile = file;
		this.vars = new Object();
		this.responseStatus = new Array(2);
  	};
 
	this.resetFunctions = function() {
  		this.onLoading = function() { };
  		this.onLoaded = function() { };
  		this.onInteractive = function() { };
  		this.onCompletion = function() { };
  		this.onError = function() { };
		this.onFail = function() { };
	};
 
	this.reset = function() {
		this.resetFunctions();
		this.resetData();
	};
 
	this.createAJAX = function() {
		try {
			this.xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e1) {
			try {
				this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e2) {
				this.xmlhttp = null;
			}
		}
 
		if (! this.xmlhttp) {
			if (typeof XMLHttpRequest != "undefined") {
				this.xmlhttp = new XMLHttpRequest();
			} else {
				this.failed = true;
			}
		}
	};
 
	this.setVar = function(name, value){
		this.vars[name] = Array(value, false);
	};
 
	this.encVar = function(name, value, returnvars) {
		if (true == returnvars) {
			return Array(encodeURIComponent(name), encodeURIComponent(value));
		} else {
			this.vars[encodeURIComponent(name)] = Array(encodeURIComponent(value), true);
		}
	}
 
	this.processURLString = function(string, encode) {
		encoded = encodeURIComponent(this.argumentSeparator);
		regexp = new RegExp(this.argumentSeparator + "|" + encoded);
		varArray = string.split(regexp);
		for (i = 0; i < varArray.length; i++){
			urlVars = varArray[i].split("=");
			if (true == encode){
				this.encVar(urlVars[0], urlVars[1]);
			} else {
				this.setVar(urlVars[0], urlVars[1]);
			}
		}
	}
 
	this.createURLString = function(urlstring) {
		if (this.encodeURIString && this.URLString.length) {
			this.processURLString(this.URLString, true);
		}
 
		if (urlstring) {
			if (this.URLString.length) {
				this.URLString += this.argumentSeparator + urlstring;
			} else {
				this.URLString = urlstring;
			}
		}
 
		// prevents caching of URLString
		this.setVar("rndval", new Date().getTime());
 
		urlstringtemp = new Array();
		for (key in this.vars) {
			if (false == this.vars[key][1] && true == this.encodeURIString) {
				encoded = this.encVar(key, this.vars[key][0], true);
				delete this.vars[key];
				this.vars[encoded[0]] = Array(encoded[1], true);
				key = encoded[0];
			}
 
			urlstringtemp[urlstringtemp.length] = key + "=" + this.vars[key][0];
		}
		if (urlstring){
			this.URLString += this.argumentSeparator + urlstringtemp.join(this.argumentSeparator);
		} else {
			this.URLString += urlstringtemp.join(this.argumentSeparator);
		}
	}
 
	this.runResponse = function() {
		eval(this.response);
	}
 
	this.runAJAX = function(urlstring) {
		if (this.failed) {
			this.onFail();
		} else {
			this.createURLString(urlstring);
			if (this.element) {
				this.elementObj = document.getElementById(this.element);
			}
			if (this.xmlhttp) {
				var self = this;
				if (this.method == "GET") {
					totalurlstring = this.requestFile + this.queryStringSeparator + this.URLString;
					this.xmlhttp.open(this.method, totalurlstring, true);
				} else {
					this.xmlhttp.open(this.method, this.requestFile, true);
					try {
						this.xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
					} catch (e) { }
				}
 
				this.xmlhttp.onreadystatechange = function() {
					switch (self.xmlhttp.readyState) {
						case 1:
							self.onLoading();
							break;
						case 2:
							self.onLoaded();
							break;
						case 3:
							self.onInteractive();
							break;
						case 4:
							self.response = self.xmlhttp.responseText;
							self.responseXML = self.xmlhttp.responseXML;
							self.responseStatus[0] = self.xmlhttp.status;
							self.responseStatus[1] = self.xmlhttp.statusText;
 
							if (self.execute) {
								self.runResponse();
							}
 
							if (self.elementObj) {
								elemNodeName = self.elementObj.nodeName;
								elemNodeName.toLowerCase();
								if (elemNodeName == "input"
								|| elemNodeName == "select"
								|| elemNodeName == "option"
								|| elemNodeName == "textarea") {
									self.elementObj.value = self.response;
								} else {
									self.elementObj.innerHTML = self.response;
								}
							}
							if (self.responseStatus[0] == "200") {
								self.onCompletion();
							} else {
								self.onError();
							}
 
							self.URLString = "";
							break;
					}
				};
 
				this.xmlhttp.send(this.URLString);
			}
		}
	};
 
	this.reset();
	this.createAJAX();
}

y codigo q carga contenidos en pagina

1
2
3
4
5
6
7
8
9
10
11
12
13
function cargarContenido(pagina){
    var ajaxPag = new sack();
    ajaxPag.requestFile = pagina;
    ajaxPag.method = "GET";
    ajaxPag.runResponse = whenResponsePag;
    ajaxPag.execute = true;
    ajaxPag.runAJAX();
}
 
function whenResponsePag(){
    var mydiv = document.getElementById("destino");
    //Esto carga en el <div> destino la página solicitada
    mydiv.innerHTML = this.response;
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve

sitio multilengua PHP y AJAX

Publicado por xve (167 intervenciones) el 15/11/2011 18:31:43
Hola emeotero, segun entiendo, quieres que de alguna manera se mantenga la variable lang con el valor es, en, etc...
Puedes hacerlo de varias maneras:

1.- utilizando una cookie, la cual, la puedes leer en cada una de las paginas que llamas desde ajax para saber que tipo de contenido devolver.

2.- puedes utilizar variables de session en el servidor, las cuales te hacen el mismo efecto, con la diferencia de pueden caducar mas rapido, pero no pueden ser modificadas por el cliente.

No se si me he explicado bien... comentame, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

sitio multilengua PHP y AJAX

Publicado por emeotero (3 intervenciones) el 15/11/2011 20:25:24
Hola xve, creo q lo estoy haciendo en todas las paginas estoy metiendo como include
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
<?php
session_start();
header('Cache-control: private'); // IE 6 FIX
if(isSet($_GET['lang']))
{
$lang = $_GET['lang'];
// register the session and set the cookie
$_SESSION['lang'] = $lang;
setcookie("lang", $lang, time() + (3600 * 24 * 30));
}
else if(isSet($_SESSION['lang']))
{
$lang = $_SESSION['lang'];
}
else if(isSet($_COOKIE['lang']))
{
$lang = $_COOKIE['lang'];
}
else
{
$lang = 'en';
}
switch ($lang) {
  case 'en':
  $lang_file = 'lang.en.php';
  break;
  case 'es':
  $lang_file = 'lang.es.php';
  break;
  case 'pt':
  $lang_file = 'lang.pt.php';
  break;
  default:
  $lang_file = 'lang.en.php';
}
include_once 'languages/'.$lang_file;
?>

con lo q estoy creando una sesion y seteando una cookie para cada una de las paginas q muestro en el div contenido. ¿no deberia de pasarle algun valor al cada unos de los links del index segun la lengua para q se muestre en el div comentado anteriormente? no se si me explico. y se ser asi ¿como haria?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar