コード例 #1
0
        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;
        }
コード例 #2
0
        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;
        }