Utilización de recursos en .net
Aprovechando que tengo instalada la versión Arquitecto de VS2005 (sólo por 180 días) en mi Windows Vista, me he puesto hoy a probar algunas de las funcionalidades que ofrece. Me iba a poner a generar un proyecto de prueba de Nibi.Negocio, pero por el camino me he encontrado el Análisis estático de código, y me he puesto a revisar los numerosos avisos que da, y a corregir algunos de ellos. Por ahí he llegado a uno que me pedía que generara un archivo de recursos para almacenar las cadenas de texto usadas en el programa, idea que tenía en mente desde hace tiempo pero que aún no había atacado, así que me he puesto a investigar eso esta mañana (declaro instaurado el viernes como el gran día del I+D).
Lo primero que encuentro es un tutorial en el SDK de Microsoft sobre recursos y localización, pero no me aclara mucho, porque comenta la utilización del ResourceManager para acceder a los recursos, y la del CultureInfo para la cultura (idioma + pais) del usuario, pero no aclara cómo realizar la conexión entre estas dos ideas. Leo en algunos otros sitios la utilización de recursos satélites, pero no me queda muy claro.
Finalmente me quedo con una solución sencilla: al agregar un nuevo archivo de recursos, crea una clase que publica esos recursos y que es global y ofrece los recursos de forma tipada. Voy a usar eso, con una clase llamada Cadenas, pero lo que aún no sé es cómo cambiar después el idioma a la aplicación. Por cierto, había llamado a la clase es-ES, pero veo que el idioma neutral nunca sigue esa nomenclatura, así que vuelvo a Cadenas. Lo hago así porque espero tener otro recurso con las imágenes que no cambien entre diferentes idiomas (que serán la mayoría), y que llamaré Imagenes.

1 Comments:
Investigando he encontrado este artículo en InformIT: http://www.informit.com/articles/printerfriendly.asp?p=414984&rl=1, al final del cual (pero muy al final) se comenta cómo hacer formularios localizables, es decir, formularios con traducciones: hay que activar la propiedad Localizable. Esto puede hacerse también en un UserControl. De hecho, yo en vez de activar Localizable, he establecido la propiedad Language, que estaba vacía, poniendo Español (España), lo que me ha activado Localizable automáticamente y me ha añadido al archivo de recursos tropecientasmil cosas (hasta los nombres de variables, cágate), entre ellas y de forma diferenciada los textos mostrados en el UserControl (lo que no son textos aparecen con un >> delante). Este cambio simplifica mucho el archivo .Designer.cs, ya que cada control se pasa al objeto resources para que le asigne las propiedades, que ahora están guardadas en el .resx. Por último, avisaros de que no es tan fácil deshacer esto. Una vez aplicado, si ponemos Localizable = false, se olvida de cargar los controles del resources y vuelve a escribir el código correspondiente en el designer, pero deja todos los ahora innecesarios recursos que añadió en el resx, y me parece un poco peligroso borrarlos a mano (porque ya antes había recursos).
Publicar un comentario
<< Home