public static void Translate <T>(T obj, string translationData, string languageId = null) where T : class, new() { if (obj != null) { string requestLanguage = ""; if (httpContextAccessor != null && httpContextAccessor.HttpContext != null && httpContextAccessor.HttpContext.Request != null && httpContextAccessor.HttpContext.Request.Headers != null) { requestLanguage = httpContextAccessor.HttpContext.Request.Headers.Any(x => x.Key == "languageid") ? httpContextAccessor.HttpContext.Request.Headers.FirstOrDefault(x => x.Key == "languageid").Value.ToString().ToUpper() : "ES"; } else { requestLanguage = "ES"; } if (!string.IsNullOrEmpty(translationData) && TranslateUtility.IsValidJson(translationData)) { Dictionary <string, List <TranslateData> > dictionary = JsonConvert.DeserializeObject <Dictionary <string, List <TranslateData> > >(translationData) ?? new Dictionary <string, List <TranslateData> >(); var translateProperties = obj.GetType().GetProperties().Where(t => t.GetCustomAttributes(typeof(TranslateAttribute), true).Length > 0).ToList(); foreach (var prop in translateProperties) { var currentDictionary = dictionary.ContainsKey(requestLanguage.ToUpper()) ? dictionary.GetValueOrDefault(requestLanguage) : new List <TranslateData>(); string value = currentDictionary.FirstOrDefault(x => x.PropertyName.ToLower() == prop.Name.ToLower())?.Value ?? ""; prop.SetValue(obj, value); } } } }
public static string SaveTranslation <T>(T obj, string translationData) where T : class, new () { string requestLanguage = ""; if (httpContextAccessor != null && httpContextAccessor.HttpContext != null && httpContextAccessor.HttpContext.Request != null && httpContextAccessor.HttpContext.Request.Headers != null) { requestLanguage = httpContextAccessor.HttpContext.Request.Headers.Any(x => x.Key == "languageid") ? httpContextAccessor.HttpContext.Request.Headers.FirstOrDefault(x => x.Key == "languageid").Value.ToString().ToUpper() : "ES"; if (string.IsNullOrEmpty(translationData) || !TranslateUtility.IsValidJson(translationData)) { translationData = ""; } Dictionary <string, List <TranslateData> > dictionary = JsonConvert.DeserializeObject <Dictionary <string, List <TranslateData> > >(translationData) ?? new Dictionary <string, List <TranslateData> >(); var translateProperties = obj.GetType().GetProperties().Where(t => t.GetCustomAttributes(typeof(TranslateAttribute), true).Length > 0).ToList(); foreach (var prop in translateProperties) { var currentDictionary = dictionary.ContainsKey(requestLanguage.ToUpper()) ? dictionary.GetValueOrDefault(requestLanguage) : new List <TranslateData>(); bool existData = currentDictionary.Exists(x => x.PropertyName.ToLower() == prop.Name.ToLower()); var currentProp = new TranslateData() { PropertyName = prop.Name, Value = prop.GetValue(obj).ToString() }; if (existData) { int index = currentDictionary.FindIndex(x => x.PropertyName.ToLower() == currentProp.PropertyName.ToLower()); if (index >= 0) { currentDictionary.RemoveAt(index); } } currentDictionary.Add(currentProp); if (dictionary.ContainsKey(requestLanguage.ToUpper())) { dictionary[requestLanguage.ToUpper()] = currentDictionary; } else { dictionary.Add(requestLanguage.ToUpper(), currentDictionary); } } translationData = JsonConvert.SerializeObject(dictionary); return(translationData); } return(""); }