Título: [SRC] Cargar Idioma desde BD "SharpDevelop 2.2 & SQLite" Publicado por: Maurice_Lupin en 5 Mayo 2012, 23:52 pm Me base en un ejemplo de vb6 que encontre con google:
http://www.recursosvisualbasic.com.ar/htm/trucos-codigofuente-visual-basic/227-aplicacion-multilenguaje-con-ado.htm Adapte el codigo a vb.net con el framework 2.0 y SQLite Herramientas: - Sharpdevelop 2.2 para el .NET Framework 2.0 - SQLite-1.0.66.0 (driver Ado.net 2.0) Links: http://www.icsharpcode.net/OpenSource/SD/Download/ SQLite-1.0.66.0-setup (descarguen el Setup) http://sourceforge.net/projects/sqlite-dotnet2/files/SQLite%20for%20ADO.NET%202.0/1.0.66.0/ Una vez instalado sólo hay que Referenciar la DLL "System.Data.SQLite.dll" al proyecto. (http://i1093.photobucket.com/albums/i439/maurice_lupin/img3.png) (http://i1093.photobucket.com/albums/i439/maurice_lupin/img2.png) Al final dejo el link del proyecto. Código
proyecto en google Docs (https://docs.google.com/open?id=0B_IPc-jU-prBdXdlTmczbFY5d3c) Saludos ;D Título: Re: [SRC] Cargar Idioma desde BD "SharpDevelop 2.2 & SQLite" Publicado por: Keyen Night en 6 Mayo 2012, 01:30 am Muy bueno, esto es necesario, nuestros programas tienen más oportunidad de progresar mientras más público tengan y eso es igual a tener la aplicación disponible en más lenguajes.
Hace tiempo necesite que una aplicación cubriera varios lenguajes, era por archivos locales, pero sigue el mismo principio; se basaba en un Diccionario String, String que como Key guardaba el nombre del control, como llegar a el y la propiedad a asignarle el Value del Diccionario, quiero decir, como que Key podría ser por ejemplo: Form1\Contenedor\Button1*Text y Value Texto en Español De modo que cuando se cargaba el Diccionario que estaba serializado en un archivo, se usaba Split para separar la ruta que lleva al control, usando Find desde la raíz hasta encontrar el Control deseado Form1.Find para obtener el control Contenedor y Contenedor.Find para obtener Button1 luego se asignaba con Reflection la propiedad Text. Para los textos que no guardaban relación con un Control los guardaba con un Key #0001 por ejemplo y seguía #0002, #0003 de modo que al cargar el Diccionario y aplicar las propiedades se ignorara todo lo que comienza con #. Tenía muchos Form e infinidad de Controles por lo qué me ayude con este código que generá el Diccionario: Una que lista todos los controles de un Form y otra que le da el nombre al control en la forma que te mencione antes. Código
Realmente me pareció la mejor forma y que resume código de manera increíble. Título: Re: [SRC] Cargar Idioma desde BD "SharpDevelop 2.2 & SQLite" Publicado por: Maurice_Lupin en 6 Mayo 2012, 20:17 pm Keyen Night, mi problema fue que al intentar acceder a los elementos de un ToolStrip o MenuStrip utilizando el tipo Control me daba error.
La colección MenuStrip1.Controls no contiene los ToolStripMenuItem sino la colección MenuStrip1.Items, el error que me daba es que los ToolStripMenuItem no son del tipo Control. Al menos que si hayas logrado acceder a los elementos de un MenuStrip o de un ToolStrip usando el tipo Control, me encantaria ver tu codigo ;D Saludos y gracias por el comentario. Título: Re: [SRC] Cargar Idioma desde BD "SharpDevelop 2.2 & SQLite" Publicado por: Keyen Night en 6 Mayo 2012, 21:26 pm Eso me paso también con TabPageControl, eso ya está resuelto en código, es una Clase llamada LanguageFile, estructura y serializa las propiedades que tengas que almacenar en un archivos que contiene información del lenguaje, el autor, y la parte de los datos con contiene el diccionario serializado. Cuando se quiere cambiar de idioma se crea un objeto LanguageFile que apunta hacia un archivo '*.lng', se llama al Sub Apply, el diccionario se deserializa, y se recorre siguiendo el cada control con Find a través de todos los Parent, una vez que lo encuentra, lee la parte que dice *PROPIEDAD y dependiendo el tipo, lee y asigna el Value del diccionario, de manera distinta, ya que en tiempo de ejecución Reflection te brinda todas las herramientas para jugar con las propiedades de forma no administrada.
Aquí está el código, coloco en la siguiente lista cosas que le faltarían hacerle que me han dado flojera :xD Desventajas:
En Value '#D#' queda comprendido como un salto de línea. Se podría hacer algo con Flags para saber cuando la propiedad a asignar es del tipo Array y tomar las precauciones al colocar Value como valor de la propiedad. Pero como por ahora no me ha servido para lo que quiero me ha dado flojera actualizarla :silbar: Para el Caso del Tool/MenuStrip se podría crear un Flag especial de modo que en Apply se le trate de una forma particular, probablemente me pondré a hacer eso :laugh: de los Flags resultaría muy útil. Código
|