Exemplo n.º 1
0
        /// <summary>
        /// Lazy Loads the text for each Control in form
        /// </summary>
        /// <param name="ControlDefaultValues">A dictionary with ControlName-Text pairs</param>
        public static Thread LazyLoadTranslations(FinOrgForm f)
        {
            try
            {
                Thread t = new Thread(() =>
                {
                    // Get a list of items to fetch
                    IEnumerable <string> items = f.ControlDefaultValues.Values;
                    if (Translations != null)
                    {
                        items = items.Except(Translations.Keys).ToArray();
                    }
                    SqlConnection con = FinOrgForm.getSqlConnection();
                    try
                    {
                        con.Open();
                        SqlCommand cmd = new SqlCommand(string.Format("SELECT text, {0} FROM TRANSLATIONS WHERE text IN ({{keys}});", currentLanguage), con);
                        cmd.AddArrayParameters(items, "keys");
                        if (cmd.Parameters.Count > 0)
                        {
                            using (SqlDataReader reader = cmd.ExecuteReader())
                            {
                                while (reader.Read())
                                {
                                    // Only Keys NOT Present in Translations Dictionary is fetched from Database
                                    if (!Translations.ContainsKey(reader["text"].ToString()))
                                    {
                                        Translations.Add(reader["text"].ToString(), reader[currentLanguage].ToString());
                                    }
                                }
                            }
                        }
                        con.Close();
                    }
                    catch (Exception e)
                    {
                        con.Close();
                        MessageBox.Show(e.Message, "FinOrg Languages LazyLoadTranslations");
                    }
                    if (LANG_DEBUG_MODE) // Copies the value from form to database currentLanguage field
                    {
                        InsertFormTranslations(f.ControlDefaultValues);
                    }

                    // Apply Translation
                    f.BeginInvoke(new Action(() =>
                    {
                        ApplyTranslation(f);
                    }));
                });
                // finish  this fast
                t.Priority = ThreadPriority.Highest;
                t.Start();
                return(t);
            }
            catch (Exception ex)
            {
                return(null);
            }
        }