Uno de los grandes inconvenientes que nos solemos encontrar en los desarrollos web, es tratar de localizar nuestros recursos y asegurarnos que toda nuestra aplicación este bien traducida.
Pero claro una aplicación web 3.0 no solo se basa en páginas de servidor, hoy en día tenemos ASP.NET, AJAX, javascript, Json, etc. Y claro todos estos recursos no los podemos controlar únicamente desde el servidor y desde el cliente no podemos acceder a los recursos utilizados por asp.net.
Estos inconvenientes hacen que a los programadores web se nos dispare la imaginación para poder solucionar estos baches cotidianos.
Una solución si utilizamos ASP.NET AJAX es utilizar diferentes ficheros javaScript como recursos, podéis encontrar más información en http://msdn.microsoft.com/es-es/library/bb398935.aspx.
Pero claro si no utilizamos ASP.NET AJAX o no nos interesa crear múltiples ficheros js podemos intentar aprovechar los recursos que ya utilizamos con ASP.NET y aquí va mi propuesta. He creado un pequeño proyecto el cual valida con un script si el cliente entra números en un TextBox, pero claro si intento aprovechar el código de asp.net para utilizar los recursos en el fichero script resulta que no funciona.
function Validar() { var check = true; var obj = document.getElementById('TextBox1'); var value = obj.value; for(var i=0;i < obj.value.length; ++i) { var new_key = value.charAt(i); if(((new_key < "0") || (new_key > "9")) && !(new_key == "")) { check = false; break; } } if(!check) alert("<%$ Resources:Resource, Saludo %>"); }
Esto no tiene nada de texto traducido. ver que podemos hacer con lo que ya contamos 😉 Primero aprovecharemos los ficheros de recursos que ya utilizamos en nuestra aplicación asp.net. Luego crearemos un método que guarde en el cliente los recursos que necesitaremos utilizar en nuestro código script.
privatevoid RecursosJavascript(Dictionary<string,string> recursos) { System.Text.StringBuilder script = new System.Text.StringBuilder(); script.AppendLine("recursos = new Object;"); foreach (KeyValuePair<string, string> recurso in recursos) { script.AppendFormat("recursos.{0} = '{1}';", recurso.Key, recurso.Value); } ScriptManager.RegisterStartupScript(this, this.GetType(), "recursos", script.ToString(), true); }
Un código muy sencillo que creará una variable donde se guardarán los recursos como texto en un objeto creado para este menester y registrará un script en la página. Luego al cargar la página inicializamos este objeto con los mismos recursos que utilizamos en la página asp.net y lo tendremos disponible desde nuestro validador script.
Finalmente desde el script utilizamos la variable de recursos generada especialmente para esta página y la utilizamos para mostrar el mensaje de error correctamente localizado.
Ya tenemos nuestra aplicación funcionando al 100% sin tenernos que preocupar por esos mensajes incontrolados desde el código de cliente.
Espero que esta idea sea util 😉