· 8 years ago · May 29, 2018, 09:14 AM
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using System.Data.SQLite;
6using System.Threading.Tasks;
7
8namespace Lib_SopCnf.src.Utils
9{
10 /// <summary>
11 /// Manager de traducciones a partir de una BBDD SQLite
12 /// </summary>
13 public class TranslationsManager
14 {
15 #region Atributos privados
16
17 /// <summary>
18 /// Objeto de conexión con la BD.
19 /// </summary>
20 SQLiteConnection _dbConnection;
21
22 #endregion Atributos privados
23
24 #region Constructor
25
26 /// <summary>
27 /// Constructor por defecto, inicializa la conexión y crea la BD si no existe
28 /// </summary>
29 public TranslationsManager()
30 {
31 try
32 {
33 // Si no existe el archivo de la base de datos, creamos un nuevo fichero
34 _dbConnection = new SQLiteConnection("Data Source=TranslationsSopCnfAppCE214DB.sqlite;Version=3;");
35 _dbConnection.Open();
36
37 // Si la tabla de idiomas disponibles no existe, se crea
38 string lsSql = "CREATE TABLE IF NOT EXISTS IDIOMAS_DISPONIBLES (codigo_idioma varchar(5) PRIMARY KEY, nombre varchar(20) NOT NULL)";
39 SQLiteCommand loCommand = new SQLiteCommand(lsSql, _dbConnection);
40 loCommand.ExecuteNonQuery();
41
42 // Si la tabla de traducciones disponibles no existe, se crea
43 lsSql = "CREATE TABLE IF NOT EXISTS TRADUCCIONES_DISPONIBLES (codigo_idioma varchar(5), grupo_traduccion varchar(40), clave_traduccion varchar(60), traduccion varchar(80) )";
44 loCommand = new SQLiteCommand(lsSql, _dbConnection);
45 loCommand.ExecuteNonQuery();
46
47 // Comprobamos si existe al menos un idioma en el sistema
48 if (GetIdiomasDisponibles().Count == 0)
49 {
50 // Insertamos un idioma por defecto
51 lsSql = "INSERT INTO IDIOMAS_DISPONIBLES VALUES ('es-es', 'Español (España)')";
52 loCommand = new SQLiteCommand(lsSql, _dbConnection);
53 loCommand.ExecuteNonQuery();
54 }
55 }
56 catch (Exception)
57 {
58
59 }
60 }
61
62 #endregion Constructor
63
64 #region Funciones públicas
65
66 /// <summary>
67 /// Devuelve una lista de pares [Cod. Idioma - Nombre] que acepta el sistema
68 /// </summary>
69 /// <returns></returns>
70 public List<string[]> GetIdiomasDisponibles()
71 {
72 List<string[]> lloReturn = new List<string[]>();
73
74 string lsSql = "SELECT * FROM IDIOMAS_DISPONIBLES";
75 SQLiteCommand loSqlCommand = new SQLiteCommand(lsSql, _dbConnection);
76 SQLiteDataReader loReader = loSqlCommand.ExecuteReader();
77 while (loReader.Read())
78 {
79 string[] loPair = new string[2];
80 loPair[0] = loReader["codigo_idioma"].ToString();
81 loPair[1] = loReader["nombre"].ToString();
82
83 lloReturn.Add(loPair);
84 }
85 loReader.Close();
86
87 return lloReturn;
88 }
89
90 #endregion Funciones públicas
91
92
93 /// <summary>
94 /// Traduce una cadena de caracteres
95 /// </summary>
96 /// <param name="psIdioma">Código de idioma al que queremos traducir</param>
97 /// <param name="psGrupoTraducciones">Grupo de traducciones en el que buscar los literales (Clases)</param>
98 /// <param name="psClaveTraduccion">Literal con el que indexamos la búsqueda</param>
99 /// <param name="psTraduccion">Cadena traducida</param>
100 /// <returns>Número de registros devueltos</returns>
101 public int Translate(string psIdioma, string psGrupoTraducciones, string psClaveTraduccion, out string psTraduccion)
102 {
103 int liReturn = 0;
104
105 psTraduccion = string.Empty;
106
107 string lsSql = "SELECT traduccion FROM TRADUCCIONES_DISPONIBLES WHERE codigo_idioma="" + psIdioma +
108 "" AND grupo_traduccion = "" + psGrupoTraducciones +
109 "" AND clave_traduccion = "" + psClaveTraduccion + """;
110 SQLiteCommand loSqlCommand = new SQLiteCommand(lsSql, _dbConnection);
111 SQLiteDataReader loReader = loSqlCommand.ExecuteReader();
112
113 while (loReader.Read())
114 {
115 psTraduccion = loReader["traduccion"].ToString();
116
117 liReturn++;
118 }
119 loReader.Close();
120
121 return liReturn;
122 }
123}
124
125/// <summary>
126 /// Método para cambiar los textos del formulario según las traducciones cargadas desde la BBDD para el idioma especificado
127 /// </summary>
128 public void TraducirForm()
129 {
130 string lsTranslation;
131
132 // ToolStrip
133 foreach (ToolStripItem loStripItem in toolStripGeneral.Items)
134 {
135 if (loStripItem is ToolStripMenuItem)
136 {
137 if (_oTM.Translate(_sCurrentLanguage, this.GetType().ToString(), ((ToolStripMenuItem)loStripItem).Name, out lsTranslation) > 0)
138 ((ToolStripMenuItem)loStripItem).Text = lsTranslation;
139 }
140 else if (loStripItem is ToolStripDropDownButton)
141 {
142 if (_oTM.Translate(_sCurrentLanguage, this.GetType().ToString(), ((ToolStripDropDownButton)loStripItem).Text, out lsTranslation) > 0)
143 ((ToolStripDropDownButton)loStripItem).Text = lsTranslation;
144
145 foreach (ToolStripItem loStripItem2 in ((ToolStripDropDownButton)loStripItem).DropDownItems)
146 {
147 if (loStripItem2 is ToolStripMenuItem)
148 {
149 if (_oTM.Translate(_sCurrentLanguage, this.GetType().ToString(), ((ToolStripMenuItem)loStripItem2).Name, out lsTranslation) > 0)
150 ((ToolStripMenuItem)loStripItem2).Text = lsTranslation;
151
152 foreach (ToolStripItem loStripItem3 in ((ToolStripMenuItem)loStripItem2).DropDownItems)
153 {
154 if (loStripItem3 is ToolStripMenuItem)
155 {
156 if (_oTM.Translate(_sCurrentLanguage, this.GetType().ToString(), ((ToolStripMenuItem)loStripItem3).Name, out lsTranslation) > 0)
157 ((ToolStripMenuItem)loStripItem3).Text = lsTranslation;
158 }
159 }
160 }
161 }
162 }
163 }
164}