protected virtual IEnumerable<CultureInfo> GetLanguagesToDisplay() { ////This is the current node - may be a group page node ////var sitemapNode = SiteMapBase.GetCurrentNode(); ////This is the real node - may be the same as sitemapNode, but is never a group page node var actualSitemapNode = SiteMapBase.GetActualCurrentNode(); PageManager pm = PageManager.GetManager(); var homePageId = SystemManager.CurrentContext.CurrentSite.HomePageId; IEnumerable<CultureInfo> availableLanguages = null; Guid nodeId; if (actualSitemapNode != null) { nodeId = actualSitemapNode.Id; } else { nodeId = homePageId; } ////This is used for generating links to language versions - we want it to be the current node, not the "real node". this.node = pm.GetPageNode(nodeId); if (actualSitemapNode != null) { availableLanguages = actualSitemapNode.AvailableLanguages; } else { availableLanguages = this.node.AvailableCultures; } this.usedLanguages = this.GetLanguagesForPage(actualSitemapNode, availableLanguages); IEnumerable<CultureInfo> shownLanguages = this.GetLanguagesList(pm, homePageId, actualSitemapNode); return shownLanguages; }
private IEnumerable<CultureInfo> GetLanguagesList(PageManager pm, Guid homePageId, PageSiteNode siteMapNode) { ////Get languages to list List<CultureInfo> languages = new List<CultureInfo>(); var settings = Telerik.Sitefinity.Services.SystemManager.CurrentContext.AppSettings; if (this.MissingTranslationAction == NoTranslationAction.HideLink) { languages.AddRange(this.usedLanguages); } else { languages.AddRange(settings.DefinedFrontendLanguages); if (homePageId != Guid.Empty) { this.homePageNode = pm.GetPageNode(homePageId); } } ////Remove current language, if necessary IList<CultureInfo> shownLanguages; CultureInfo currentLanguage = Thread.CurrentThread.CurrentUICulture; if (this.IncludeCurrentLanguage) { shownLanguages = languages; // In design mode, if the page is not yet published, we want to display the current language if the user has selected the option. if (SystemManager.IsDesignMode && siteMapNode != null && !siteMapNode.IsPublished(currentLanguage)) { shownLanguages.Add(currentLanguage); } } else { shownLanguages = languages.Where(ci => !ci.Equals(currentLanguage)).ToList(); } return shownLanguages; }