using System; using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Threading.Tasks; using JD.Localization.Core.Model; using JD.Localization.Core.Model.Attributes; using JD.Oasis.Service.API; using OasisLanguage = JD.Oasis.Service.API.Language; namespace JD.Oasis.Module { // TODO: Clean this helper class properly public class OasisHelpers { public static async Task> GetOasisNamesForLanguagesAsync(IOasisService oasisService, IEnumerable uafLanguages) { IEnumerable oasisLanguages = await oasisService.GetLanguagesAsync(); Dictionary oasisNameForLanguages = new Dictionary(); uafLanguages = uafLanguages.ToArray(); foreach (OasisLanguage oasisLanguage in oasisLanguages) { UafLanguage correspondingUafLanguage = OasisHelpers.GetUafLanguage(oasisLanguage); if (uafLanguages.Contains(correspondingUafLanguage)) { oasisNameForLanguages[correspondingUafLanguage] = oasisLanguage.Name; } } return oasisNameForLanguages; } public static UafLanguage GetUafLanguage(OasisLanguage language) { if (language.IsMaster) { return UafLanguage.ITF_LANGUAGE_DEV_REFERENCE; } var cultureInfo = GetLanguageCultureInfo(language.Name); foreach (var uafLanguage in Enum.GetValues(typeof(UafLanguage)).Cast()) { var memInfo = typeof(UafLanguage).GetMember(uafLanguage.ToString()); var attributes = memInfo[0].GetCustomAttributes(typeof(CultureNameAttribute), false); if (attributes.Length > 0) { var cultureNames = ((CultureNameAttribute)attributes[0]).Values; if (cultureNames.Any(cultureName => cultureName.Equals(cultureInfo.Name, StringComparison.OrdinalIgnoreCase))) { return uafLanguage; } } } return UafLanguage.ITF_LANGUAGE_UNKNOWN; } public static CultureInfo GetLanguageCultureInfo(string languageName) { string[] toRemove = { " - NOT_USED", " - NOT-USED", " Final", " Master Text" }; foreach (var s in toRemove) { languageName = languageName.Replace(s, ""); } CultureInfo cultureInfo; if (languageName.Contains("GAV Chinese")) { cultureInfo = CultureInfo.GetCultureInfo("zh"); // May be changed later } else if (languageName.Contains("Traditional Chinese")) { cultureInfo = CultureInfo.GetCultureInfo("zh-TW"); } else if (languageName.Contains("zh Chinese")) // Should be named "Simplified Chinese" in Oasis, but it seems we can't for some reason { cultureInfo = CultureInfo.GetCultureInfo("zh-CN"); } else if (languageName.Contains("Brazilian")) { cultureInfo = CultureInfo.GetCultureInfo("pt-BR"); } else if (languageName.Contains("European Portuguese")) { cultureInfo = CultureInfo.GetCultureInfo("pt"); } else if (languageName.Contains("Norwegian")) { cultureInfo = CultureInfo.GetCultureInfo("nb"); } else { var allCultures = CultureInfo.GetCultures(CultureTypes.AllCultures); cultureInfo = allCultures.FirstOrDefault(x => languageName == x.EnglishName); if (cultureInfo == null) { var languageNameCleaned = string.Join(" ", languageName.Split(' ').Skip(1).ToArray()); cultureInfo = allCultures.FirstOrDefault(x => languageNameCleaned == x.EnglishName); } } return cultureInfo; } } }