/// <summary> /// Load language files /// </summary> public static List <MultiLangEngine> LoadLanguages() { List <MultiLangEngine> languages = new List <MultiLangEngine>(); /* Check if language dir exists * 1. If it does, scan it * 2. If it doesn't, skip it */ string langPath = Environment.CurrentDirectory + @"\lang\"; if (Directory.Exists(langPath)) { // 1 languages = MultiLangEngine.ScanDirectory(langPath); } /* * Load built-in language files */ try { XmlDocument xmldoc = new XmlDocument(); xmldoc.LoadXml(Properties.Resources.dwas2_en_US); languages.Add(new MultiLangEngine(xmldoc)); xmldoc.LoadXml(Properties.Resources.dwas2_zh_CN); languages.Add(new MultiLangEngine(xmldoc)); } catch (Exception ex) { // skip } return(languages); }
/// <summary> /// Apply MLE on some UI elements of a dependency object /// </summary> /// <param name="lang">the MLE</param> /// <param name="depObj">the dependency object</param> public static void ApplyUILanguage(MultiLangEngine lang, DependencyObject depObj) { Type[] types = { typeof(TextBlock), typeof(Button), typeof(Label) }; foreach (Type T in types) { ApplyLanguageOfOneType(lang, T, "Text", depObj); } }
/// <summary> /// Apply MLE on a type of UI elements of a dependency object /// </summary> /// <param name="lang">the MLE</param> /// <param name="T">the type of UI element</param> /// <param name="propertyName">the property consisting the string to set</param> /// <param name="depObj">the dependency object</param> public static void ApplyLanguageOfOneType(MultiLangEngine lang, Type T, string propertyName, DependencyObject depObj) { MethodInfo m = typeof(WPFHelper).GetMethod("FindVisualChildren", BindingFlags.Public | BindingFlags.Static); m = m.MakeGenericMethod(T); foreach (object obj in (IEnumerable)m.Invoke(null, new Object[] { depObj })) { PropertyInfo theProperty = obj.GetType().GetProperty(propertyName, BindingFlags.Public | BindingFlags.Instance); if (theProperty != null) { theProperty.SetValue(obj, theProperty.GetValue(obj, null).ToString().t(lang), null); } } }
/// <summary> /// Select a language (MLE) /// </summary> /// <param name="languages">the list of MLEs</param> /// <param name="preferred">a preferred language</param> /// <returns>selected MLE</returns> public static MultiLangEngine SelectLanguage(List <MultiLangEngine> languages, string preferred) { /* Determine the UI language * 1. Try to use preferred language * 2. Try to use system language * 3. Use languages[0] */ if (languages.Count < 1) { return(new MultiLangEngine()); } else { MultiLangEngine theLang = null; languages.ForEach(l => { if (string.Compare(l.Language, preferred) == 0) { theLang = l; } }); if (theLang != null) { // 1 return(theLang); } else { // 2 string sysLang = System.Globalization.CultureInfo.CurrentUICulture.Name; languages.ForEach(l => { if (l.Language.ToLower().Contains(sysLang.ToLower())) { theLang = l; } }); if (theLang != null) { return(theLang); } else { // 3 return(languages[0]); } } } }
public MainWindow() { InitializeComponent(); // init logger string logpath = System.AppDomain.CurrentDomain.BaseDirectory + @"\DWAS2.log"; GeneralLogger.Initialize(logpath); // read and process configuration config.ReadConfig(); ProcessConfig(); // check hiding if (File.Exists(config.wpLandscape) && File.Exists(config.wpPortrait) && File.Exists(config.lcLandscape) && File.Exists(config.lcPortrait)) { this.shouldHideAtStartup = true; } // read language languages = DWAS2LanguageManager.LoadLanguages(); lang = DWAS2LanguageManager.SelectLanguage(languages, config.language); if (lang.Language.CompareTo(config.language) != 0) { config.language = lang.Language; config.SaveConfig(); } // LANGUAGE IS PROCESSED IN WINDOW_LOADED EVENT HANDLER // read orientation lastOrientation = DWAS2Interop.GetDesktopOrientation(config.reverse); // notify icon InitNotifyIcon(); // initial set UpdateDetection(); // start timer InitTimer(); }