Exemplo n.º 1
0
        /// <summary>
        /// Returns a list of the languages available in the locale file.
        /// </summary>
        /// <returns>A System.Collections.Generic.SortedDictionary containing the available languages.</returns>
        public static SortedDictionary <string, CultureInfo> GetLanguages()
        {
            if (availableLanguages != null)
            {
                return(availableLanguages);
            }

            try
            {
                availableLanguages = new SortedDictionary <string, CultureInfo>();
                XmlTextReader xmlReader = new XmlTextReader(localeFile);

                while (xmlReader.Read())
                {
                    if (xmlReader.AttributeCount > 0 &&
                        xmlReader.NodeType == XmlNodeType.Element &&
                        xmlReader.Name.Equals("Language", StringComparison.Ordinal))
                    {
                        try
                        {
                            CultureInfo culture = new CultureInfo(xmlReader.GetAttribute(0));
                            availableLanguages.Add(culture.TwoLetterISOLanguageName, culture);
                            xmlReader.Skip();
                        }
                        catch
                        {
                        }
                    }
                }

                return(availableLanguages);
            }
            catch (Exception ex)
            {
                ExceptionHandler.LogException(ex);
                throw;
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Saves the settings of an instance class to the specified file.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="instance">The instance class to get the settings from.</param>
        public static void Save <T>(T instance) where T : SettingsBase
        {
            try
            {
                if (!String.IsNullOrEmpty(instance.settingFile))
                {
                    using (StreamWriter writer = new StreamWriter(instance.settingFile, false, Encoding.UTF8))
                    {
                        XmlSerializer xs = new XmlSerializer(instance.GetType());

                        XmlSerializerNamespaces emptyNamespace = new XmlSerializerNamespaces();
                        emptyNamespace.Add(String.Empty, String.Empty);

                        xs.Serialize(writer, instance, emptyNamespace);
                        writer.Flush();
                    }
                }
            }
            catch (Exception ex)
            {
                ExceptionHandler.LogException(ex);
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// Applies localization using the specified language code to all form controls,
        /// the main menu and the form itself.
        /// </summary>
        /// <param name="form"></param>
        /// <param name="menu">The main form menu.</param>
        /// <param name="languageCode">The language code to use the localized strings for.</param>
        /// <returns></returns>
        public static bool Localize(Form form, MainMenu menu, string languageCode)
        {
            try
            {
                SortedDictionary <string, CultureInfo> availableLanguages = GetLanguages();

                if (availableLanguages == null || availableLanguages.Count == 0)
                {
                    throw new UnableToLocalizeException();
                }

                CultureInfo culture;

                try
                {
                    culture = new CultureInfo(languageCode);
                }
                catch
                {
                    culture = new CultureInfo(defaultLanguage);
                }

                if (culture.TwoLetterISOLanguageName != currentCulture.TwoLetterISOLanguageName)
                {
                    localizedStrings.Clear();

                    if (!availableLanguages.ContainsKey(culture.TwoLetterISOLanguageName))
                    {
                        culture = new CultureInfo(defaultLanguage);
                    }
                }

                if (localizedStrings.Count == 0)
                {
                    if (!LoadStrings(availableLanguages[culture.TwoLetterISOLanguageName].Name))
                    {
                        throw new UnableToLocalizeException();
                    }
                }

                currentCulture = availableLanguages[culture.TwoLetterISOLanguageName];
                isRtlCulture   = currentCulture.TextInfo.IsRightToLeft;

                string formPrefix    = form.Name + ".";
                string localizedText = String.Empty;

                if (!isRtlCulture)
                {
                    form.RightToLeft = RightToLeft.No;
                }
                else
                {
                    form.RightToLeft = RightToLeft.Yes;
                }

                if (localizedStrings.TryGetValue(formPrefix + "Text", out localizedText))
                {
                    form.Text = localizedText;
                }

                foreach (Control control in form.Controls)
                {
                    LocalizeControl(control, formPrefix);
                }

                if (menu != null)
                {
                    if (!isRtlCulture)
                    {
                        menu.RightToLeft = RightToLeft.No;
                    }
                    else
                    {
                        menu.RightToLeft = RightToLeft.Yes;
                    }

                    foreach (MenuItem menuItem in menu.MenuItems)
                    {
                        LocalizeMenu(menuItem, formPrefix);
                    }
                }

                if (form.RightToLeftLayout != isRtlCulture)
                {
                    form.RightToLeftLayout = isRtlCulture;
                }

                Thread.CurrentThread.CurrentUICulture = currentCulture;
                Thread.CurrentThread.CurrentCulture   = currentCulture;
                return(true);
            }
            catch (FileNotFoundException ex)
            {
                string text = "Can't translate the program because the language file doesn't exists." +
                              "\n\nExtract the \"" + Path.GetFileName(localeFile) +
                              "\" file from the program archive.";

                ExceptionHandler.LogException(ex);
                ExceptionHandler.ShowMessage(text);
                return(false);
            }
            catch (UnableToLocalizeException ex)
            {
                ExceptionHandler.LogException(ex);
                return(false);
            }
            catch (Exception ex)
            {
                ExceptionHandler.LogException(ex);
                return(false);
            }
        }