using System.Collections.Generic; using System.Globalization; using System.Linq; using AutoMapper; using Umbraco.Core.Models; using Umbraco.Web.Models.ContentEditing; using Language = Umbraco.Web.Models.ContentEditing.Language; namespace Umbraco.Web.Models.Mapping { internal class LanguageMapperProfile : Profile { public LanguageMapperProfile() { CreateMap() .ForMember(l => l.Name, expression => expression.MapFrom(x => x.CultureInfo.DisplayName)); CreateMap, IEnumerable>() .ConvertUsing(); } /// /// Converts a list of to a list of and ensures the correct order and defaults are set /// // ReSharper disable once ClassNeverInstantiated.Local private class LanguageCollectionTypeConverter : ITypeConverter, IEnumerable> { public IEnumerable Convert(IEnumerable source, IEnumerable destination, ResolutionContext context) { var langs = source.Select(x => context.Mapper.Map(x, null, context)).ToList(); //Put the default language first in the list & then sort rest by a-z var defaultLang = langs.SingleOrDefault(x => x.IsDefault); //Remove the default lang from the list for now langs.Remove(defaultLang); //Sort the remaining languages a-z langs.OrderBy(x => x.Name); //Insert the default lang as the first item langs.Insert(0, defaultLang); return langs; } } } }