public IEnumerable <Models.Language> GetAllLanguages() { List <Models.Language> languages = new List <Models.Language>(); languages.AddRange( LocalizationContext.Languages .Select(o => o.CultureInfo) .Select(o => new Models.Language { ISOCode = o.Name, DisplayName = o.DisplayName, NativeName = o.NativeName })); // See if one has already been set via the event handler Models.Language activeLanguage = languages.FirstOrDefault(o => o.IsDefault); // If not try set from current thread if (activeLanguage == null) { activeLanguage = GetActiveLanguage(languages, Thread.CurrentThread.CurrentUICulture.Name); } // Couldn't find from the thread, so try from web.config if (activeLanguage == null) { activeLanguage = GetActiveLanguage(languages, LocalizationContext.DefaultCulture.Name); } // Couldn't find a good enough match, just select the first language if (activeLanguage == null) { activeLanguage = languages.FirstOrDefault(); } // If we found any we set it as the default language for the backend if (activeLanguage != null) { languages.Single(o => o.ISOCode == activeLanguage.ISOCode).IsDefault = true; } return(languages); }
private Models.Language GetActiveLanguage( List <Models.Language> languages, string isoCode) { // Try settings to exact match of current culture Models.Language language = languages.FirstOrDefault(o => o.ISOCode == isoCode); // Try setting to nearest match if (language == null) { language = languages.FirstOrDefault(o => o.ISOCode.Contains(isoCode)); } // Try setting to nearest match if (language == null) { language = languages.FirstOrDefault(o => isoCode.Contains(o.ISOCode)); } return(language); }