ASP Site Map multi-idioma, también el parámetro URL

En la red existen varios tutoriales sobre cómo localizar (ajustar al
idioma) un site map de asp.net. De hecho, incluso Microsoft tiene una página con una breve explicación de ello, pero haciendo hincapié en que se pueden localizar los parámetros title y description pero no el parámetro url. En esa misma página deja unas ligeras pistas de cómo localizar el parámetro url,
pero demasiado ligeras, pues no encuentro nadie que lo haya conseguido.
Existen varios intentos por la red, algunos dicen que funcionan, pero
eso no es lo que yo he comprobado. Por ejemplo en este link
hay una solución un poco rebuscada que sólo funciona la primera vez que
se ejecuta la aplicación, desde ese momento guarda la preferencia de
lenguaje y siempre muestra el sitemap para ese mensaje. Un buen intento
que se queda corto, y un poco complicado, pues hay que crear un
SiteMapProvider personalizado.

Mi solución

Mi solución es la siguente. Creamos un sitemap para cada idioma, por
ejemplo Web.es.sitemap y Web.en.sitemap. En cada uno definimos los nodos
con sus atributos title, description, url y cualquier otro que queramos en su idioma correspondiente.

Site Map en inglés

Site Map en español

Ahora debemos configurar nuestra aplicación para que disponga de dos
proveedores de site maps, ojo, dos proveedores. Así quedaría nuestro
Web.config:

A continuación, en nuetra página maestra que es la que se debería
encargar de crear el menú de navegación a partir del sitemap, debemos
definir un método que en tiempo de ejecución cambie de proveedor de sitemap al datasource que empleemos para generar el menú de navegación. Yo lo hago en el método Page_Load:

En mi caso utilizo un par de Repeaters para crear el menú de navegación a
partir del Datasource SiteMapDataSource1 (original, eh), mostrando
tanto los parámetros url, title y description como otros personalizados como Image, ulid o pseudoUrl. Así se crea mi menú de navegación a partir de un site map con el parámetro url localizado de acuerdo al idioma.

Espero que a alguien le sirva.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *