/// </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
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
};\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
/// </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
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
/// </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
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