Skip to content

Instantly share code, notes, and snippets.

@sitefinitySDK
Last active November 30, 2022 14:51
using System;
using System.Globalization;
using System.Linq;
using System.Text.RegularExpressions;
using Telerik.Sitefinity.Localization;
using Telerik.Sitefinity.Modules.Pages;
using Telerik.Sitefinity.Pages.Model;
using Telerik.Sitefinity.Services;
namespace Telerik.Sitefinity.Documentation.CodeSnippets.DevGuide.SitefinityEssentials.Multilingual
{
public partial class MultilingualSnippets
{
public static void TranslateSplitPage(Guid pageNodeId, string targetCulture, string pageName, bool copyContents, string sourceCulture)
{
// Get the PageNode
PageManager manager = PageManager.GetManager();
PageNode pageNode = manager.GetPageNodes().FirstOrDefault(x => x.Id == pageNodeId);
if (pageNode == null)
{
return; // PageNode not found
}
CultureInfo targetCultureInfo = SystemManager.CurrentContext.AppSettings.GetCultureByName(targetCulture);
// Set values for PageNode properties
pageNode.Title.SetString(targetCultureInfo, pageName);
pageNode.Description.SetString(targetCultureInfo, pageName);
pageNode.UrlName.SetString(targetCultureInfo, Regex.Replace(pageName.ToLower(), @"[^\w\-\!\$\'\(\)\=\@\d_]+", "-"));
PageData pageData = null;
if (pageNode.LocalizationStrategy != LocalizationStrategy.Split)
{
// Set the pageNode LocalizationStrategy for the first method call
manager.InitializePageLocalizationStrategy(pageNode, LocalizationStrategy.Split, false);
}
else
{
// For subsequent method calls create an empty page data
pageData = manager.CreatePageData();
pageData.Culture = targetCultureInfo.Name;
pageData.NavigationNode = pageNode;
}
if (copyContents)
{
// Copy page contents from source culture
CultureInfo sourceCultureInfo = SystemManager.CurrentContext.AppSettings.GetCultureByName(sourceCulture);
manager.InitializeSplitPage(pageNode, sourceCultureInfo, targetCultureInfo);
}
// Retreive the page data of the page node
pageData = pageNode.GetPageData(targetCultureInfo);
// Set values for PageData properties
pageData.HtmlTitle.SetString(targetCultureInfo, pageName);
pageData.Description.SetString(targetCultureInfo, pageName);
pageData.Keywords.SetString(targetCultureInfo, pageName);
// Publish draft page
var page = manager.EditPage(pageData.Id, targetCultureInfo);
manager.PublishPageDraft(page, targetCultureInfo);
// Publish the page
pageNode.ApprovalWorkflowState.SetString(targetCultureInfo, "Published");
manager.SaveChanges();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment