]> granicus.if.org Git - handbrake/commitdiff
WinGui: Use ISO639-2 Codes rather than language names for auto language selection
authorsr55 <sr55.hb@outlook.com>
Wed, 29 May 2013 17:31:58 +0000 (17:31 +0000)
committersr55 <sr55.hb@outlook.com>
Wed, 29 May 2013 17:31:58 +0000 (17:31 +0000)
git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@5524 b64f7644-9d1e-0410-96f1-a4d463321fa5

win/CS/HandBrake.ApplicationServices/Parsing/Subtitle.cs
win/CS/HandBrake.ApplicationServices/Utilities/LanguageUtilities.cs
win/CS/HandBrakeWPF/ViewModels/AudioViewModel.cs
win/CS/HandBrakeWPF/ViewModels/SubtitlesViewModel.cs

index 34a919908b0f71fb5351dde960b46d07cc3cb139..0a68476f4ff190730b2d4a23d7517ec39d674228 100644 (file)
@@ -68,6 +68,22 @@ namespace HandBrake.ApplicationServices.Parsing
         /// </summary>\r
         public string LanguageCode { get; set; }\r
 \r
+        /// <summary>\r
+        /// Gets the language code clean.\r
+        /// TODO Remove this after fixing language code.\r
+        /// </summary>\r
+        public string LanguageCodeClean\r
+        {\r
+            get\r
+            {\r
+                if (this.LanguageCode != null)\r
+                {\r
+                    return this.LanguageCode.Replace("iso639-2: ", string.Empty).Trim();\r
+                }\r
+                return string.Empty;\r
+            }\r
+        }\r
+\r
         /// <summary>\r
         /// Gets or sets the Subtitle Type\r
         /// </summary>\r
index 833c6d98940209ffd2226d58622751720e571586..bbfe8f62c36ec871dddaca570e8b809674f5334d 100644 (file)
 namespace HandBrake.ApplicationServices.Utilities\r
 {\r
     using System.Collections.Generic;\r
+    using System.Collections.Specialized;\r
 \r
     /// <summary>\r
     /// Language Utilities\r
     /// </summary>\r
     public class LanguageUtilities\r
     {\r
+        /// <summary>\r
+        /// The language map.\r
+        /// </summary>\r
+        private static IDictionary<string, string> languageMap;\r
+\r
         /// <summary>\r
         /// Map languages and their iso639_2 value into a IDictionary\r
         /// </summary>\r
         /// <returns>A Dictionary containing the language and iso code</returns>\r
         public static IDictionary<string, string> MapLanguages()\r
         {\r
-            IDictionary<string, string> languageMap = new Dictionary<string, string>\r
+            if (languageMap != null)\r
+            {\r
+                return languageMap;\r
+            }\r
+\r
+            languageMap = new Dictionary<string, string>\r
                                                           {\r
                                                               {"(Any)", "und"}, \r
                                                               {"Afar", "aar"}, \r
@@ -213,5 +224,30 @@ namespace HandBrake.ApplicationServices.Utilities
                                                           };\r
             return languageMap;\r
         }\r
+\r
+        /// <summary>\r
+        /// The get language codes.\r
+        /// </summary>\r
+        /// <param name="userLanguages">\r
+        /// The user languages.\r
+        /// </param>\r
+        /// <returns>\r
+        /// The <see cref="IList"/>.\r
+        /// </returns>\r
+        public static List<string> GetLanguageCodes(StringCollection userLanguages)\r
+        {\r
+            // Translate to Iso Codes\r
+            List<string> iso6392Codes = new List<string>();\r
+            foreach (var item in userLanguages)\r
+            {\r
+                string isoCode;\r
+                if (LanguageUtilities.MapLanguages().TryGetValue(item, out isoCode))\r
+                {\r
+                    iso6392Codes.Add(isoCode);\r
+                }\r
+            }\r
+\r
+            return iso6392Codes;\r
+        } \r
     }\r
 }\r
index 2146b1c6ccaafdc597a92a745b5780b131711ad4..ee9b09f31dc429506798e89d92584830ea9aaa78 100644 (file)
@@ -38,6 +38,9 @@ namespace HandBrakeWPF.ViewModels
         /// </summary>\r
         private IEnumerable<Audio> sourceTracks;\r
 \r
+        /// <summary>\r
+        /// The current preset.\r
+        /// </summary>\r
         private Preset currentPreset;\r
 \r
         #region Constructors and Destructors\r
@@ -414,9 +417,15 @@ namespace HandBrakeWPF.ViewModels
         private IEnumerable<Audio> GetSelectedLanguagesTracks()\r
         {\r
             List<Audio> trackList = new List<Audio>();\r
-            foreach (string language in this.UserSettingService.GetUserSetting<StringCollection>(UserSettingConstants.SelectedLanguages))\r
+\r
+\r
+            List<string> isoCodes =\r
+                LanguageUtilities.GetLanguageCodes(\r
+                    this.UserSettingService.GetUserSetting<StringCollection>(UserSettingConstants.SelectedLanguages));\r
+\r
+            foreach (string code in isoCodes)\r
             {\r
-                trackList.AddRange(this.SourceTracks.Where(source => source.Language.Trim() == language));\r
+                trackList.AddRange(this.SourceTracks.Where(source => source.LanguageCode.Trim() == code));\r
             }\r
 \r
             return trackList;\r
index 90dae495fe2d190d1c5bc878a920b11ff899e65d..feabc08f3e6cef36c25d0d4caff5b3f45cfb9ef8 100644 (file)
@@ -113,7 +113,6 @@ namespace HandBrakeWPF.ViewModels
         /// </summary>\r
         public void AddAllClosedCaptions()\r
         {\r
-\r
             foreach (Subtitle subtitle in this.SourceTitlesSubset(null).Where(s => s.SubtitleType == SubtitleType.CC))\r
             {\r
                 this.Add(subtitle);\r
@@ -137,12 +136,14 @@ namespace HandBrakeWPF.ViewModels
         public void AddAllRemainingForSelectedLanguages()\r
         {\r
             // Get a list of subtitle tracks that match the users lanaguages\r
-            StringCollection userSelectedLanguages =\r
-                this.UserSettingService.GetUserSetting<StringCollection>(UserSettingConstants.SelectedLanguages);\r
-            userSelectedLanguages.Add(\r
-                this.UserSettingService.GetUserSetting<string>(UserSettingConstants.NativeLanguageForSubtitles));\r
+            StringCollection userSelectedLanguages = this.UserSettingService.GetUserSetting<StringCollection>(UserSettingConstants.SelectedLanguages);\r
+            userSelectedLanguages.Add(this.UserSettingService.GetUserSetting<string>(UserSettingConstants.NativeLanguageForSubtitles));\r
+\r
+            // Translate to Iso Codes\r
+            List<string> iso6392Codes = LanguageUtilities.GetLanguageCodes(userSelectedLanguages);\r
+\r
             List<Subtitle> availableTracks =\r
-                this.SourceTracks.Where(subtitle => userSelectedLanguages.Contains(subtitle.Language)).ToList();\r
+                this.SourceTracks.Where(subtitle => iso6392Codes.Contains(subtitle.LanguageCodeClean)).ToList();\r
 \r
             foreach (Subtitle subtitle in this.SourceTitlesSubset(availableTracks))\r
             {\r