public void Process(SitemapSiteArgs args)
        {
            Assert.ArgumentNotNull(args, nameof(args));

            var targetLanguage = args.SiteContext.Language;

            if (string.IsNullOrWhiteSpace(targetLanguage))
            {
                Logger.Error($"No language set for site: {args.SiteContext.Name}");
                args.AbortPipeline();
                return;
            }

            var language = LanguageManager.GetLanguage(targetLanguage);

            if (language == null)
            {
                Logger.Error($"Unable to resolve language for site: {args.SiteContext.Name}, given language name: {targetLanguage}");
                args.AbortPipeline();
                return;
            }

            args.SitemapLanguages = new List <SitemapLanguage> {
                new SitemapLanguage {
                    Language = language
                }
            };
        }
        private static List <Link> BuildAlternates(IEnumerable <SitemapItem> alternates, SitemapSiteArgs sitemapSiteArgs)
        {
            var links = new List <Link>();

            foreach (var alternate in alternates)
            {
                var sitemapItemLinkArgs = new SitemapItemLinkArgs(alternate);

                CorePipeline.Run("sitemap.GetItemLink", sitemapItemLinkArgs);

                if (string.IsNullOrWhiteSpace(sitemapItemLinkArgs.Link))
                {
                    Logger.Warn(
                        $"Unable to determine link for item: {alternate.Item.Paths.Path} and site: {sitemapSiteArgs.SiteContext.Name}");
                    continue;
                }

                var customLang = sitemapSiteArgs.SitemapLanguages.FirstOrDefault(i =>
                                                                                 string.Equals(i.Language.Name, alternate.Item.Language.Name,
                                                                                               StringComparison.InvariantCultureIgnoreCase));

                if (customLang == null)
                {
                    Logger.Warn(
                        $"Unable to find CustomLanguage for item: {alternate.Item.Paths.Path}, language: {alternate.Item.Language.Name}, site: {sitemapSiteArgs.SiteContext.Name}");
                    continue;
                }

                links.Add(new Link()
                {
                    Href     = sitemapItemLinkArgs.Link,
                    Hreflang = customLang.HrefLang,
                    Rel      = "alternate",
                    Item     = alternate.Item
                });
            }

            return(links);
        }