private static void LocalizeParts(Web web, TokenParser parser, string url, WebPartCollection webParts, PnPMonitoredScope scope) { if (CanUseAcceptLanguageHeaderForLocalization(web)) { var context = web.Context; var allParts = web.GetWebParts(parser.ParseString(url)).ToList(); foreach (var webPart in webParts) { var partOnPage = allParts.FirstOrDefault(w => w.ZoneId == webPart.Zone && w.WebPart.ZoneIndex == webPart.Order); if (webPart.Title.ContainsResourceToken() && partOnPage != null) { var resourceValues = parser.GetResourceTokenResourceValues(webPart.Title); foreach (var resourceValue in resourceValues) { // Save property with correct locale on the request to make it stick // http://sadomovalex.blogspot.no/2015/09/localize-web-part-titles-via-client.html context.PendingRequest.RequestExecutor.WebRequest.Headers["Accept-Language"] = resourceValue.Item1; partOnPage.WebPart.Properties["Title"] = resourceValue.Item2; partOnPage.SaveWebPartChanges(); context.ExecuteQueryRetry(); } } } context.PendingRequest.RequestExecutor.WebRequest.Headers.Remove("Accept-Language"); } else { // warning scope.LogWarning(CoreResources.Provisioning_Extensions_WebPartLocalization_Skip); } }
private bool ValidateResourceEntries(TokenParser sParser, TokenParser tParser, string sTokenValue, string tTokenValue) { int sCount = 0; int tCount = 0; bool isValid = false; var sResValues = sParser.GetResourceTokenResourceValues(sTokenValue); var tResValues = tParser.GetResourceTokenResourceValues(tTokenValue); foreach (var sResVal in sResValues) { sCount++; var tResItem = tResValues.Where(t => t.Item1.ToLower().Equals(sResVal.Item1.ToLower())).FirstOrDefault(); if (tResItem != null && tResItem.Item2.ToLower() == sResVal.Item2.ToLower()) { tCount++; break; } } if (sCount == tCount) { isValid = true; } return(isValid); }
public bool ValidateListView(ProvisioningTemplate template, TokenParser parser) { var web = cc.Web; cc.Load(web.Lists); cc.ExecuteQueryRetry(); var allOk = true; foreach (var listDef in template.Lists) { var list = web.GetListByUrl(listDef.Url); foreach (var viewDef in listDef.Views) { XElement currentXml = XElement.Parse(viewDef.SchemaXml); var viewUrl = currentXml.Attribute("Url").Value; var dispName = currentXml.Attribute("DisplayName").Value; if (dispName.ContainsResourceToken()) { var resourceValues = parser.GetResourceTokenResourceValues(dispName); foreach (var resourceValue in resourceValues) { list.Context.PendingRequest.RequestExecutor.WebRequest.Headers["Accept-Language"] = resourceValue.Item1; list.Context.Load(list.Views); list.Context.ExecuteQueryRetry(); var view = list.Views.Single(v => v.ServerRelativeUrl.EndsWith(viewUrl)); if (!view.Title.Equals(resourceValue.Item2)) { allOk = false; } } } } } return(allOk); }
internal static void LocalizeNavigationNode(this Microsoft.SharePoint.Client.NavigationNode navigationNode, Web web, string token, TokenParser parser, PnPMonitoredScope scope) { if (CanUseAcceptLanguageHeaderForLocalization(web)) { web.EnsureProperties(w => w.Language, w => w.IsMultilingual, w => w.SupportedUILanguageIds); if (web.IsMultilingual) { var context = web.Context; var resourceValues = parser.GetResourceTokenResourceValues(token); foreach (var resourceValue in resourceValues) { var translationculture = new CultureInfo(resourceValue.Item1); if (web.SupportedUILanguageIds.Contains(translationculture.LCID)) { // Save property with correct locale on the request to make it stick // http://sadomovalex.blogspot.no/2015/09/localize-web-part-titles-via-client.html context.PendingRequest.RequestExecutor.WebRequest.Headers["Accept-Language"] = resourceValue.Item1; navigationNode.Title = resourceValue.Item2; navigationNode.Update(); context.ExecuteQueryRetry(); } } } else { scope.LogWarning(CoreResources.Provisioning_Extensions_NavigationLocalization_NoMUI_Skip); } } else { // warning scope.LogWarning(CoreResources.Provisioning_Extensions_NavigationLocalization_Skip); } }
internal static void LocalizeView(this Microsoft.SharePoint.Client.View view, Web web, string token, TokenParser parser, PnPMonitoredScope scope) { if (CanUseAcceptLanguageHeaderForLocalization(web)) { var context = web.Context; //preserve Default Language to set last since otherwise Entries in QuickLaunch can show wrong language web.EnsureProperties(w => w.Language, w => w.IsMultilingual, w => w.SupportedUILanguageIds); if (web.IsMultilingual) { //just update if web is multilingual var culture = new CultureInfo((int)web.Language); var resourceValues = parser.GetResourceTokenResourceValues(token); var defaultLanguageResource = resourceValues.FirstOrDefault(r => r.Item1.Equals(culture.Name, StringComparison.InvariantCultureIgnoreCase)); if (defaultLanguageResource != null) { foreach (var resourceValue in resourceValues.Where(r => !r.Item1.Equals(culture.Name, StringComparison.InvariantCultureIgnoreCase))) { var translationculture = new CultureInfo(resourceValue.Item1); if (web.SupportedUILanguageIds.Contains(translationculture.LCID)) { // Save property with correct locale on the request to make it stick // http://sadomovalex.blogspot.no/2015/09/localize-web-part-titles-via-client.html context.PendingRequest.RequestExecutor.WebRequest.Headers["Accept-Language"] = resourceValue.Item1; view.Title = resourceValue.Item2; view.Update(); context.ExecuteQueryRetry(); } } //Set for default Language of Web context.PendingRequest.RequestExecutor.WebRequest.Headers["Accept-Language"] = defaultLanguageResource.Item1; view.Title = defaultLanguageResource.Item2; view.Update(); context.ExecuteQueryRetry(); } else { //skip since default language of web is not contained in resource file scope.LogWarning(CoreResources.Provisioning_Extensions_ViewLocalization_DefaultLngMissing_Skip); } } else { //skip since web is not multilingual scope.LogWarning(CoreResources.Provisioning_Extensions_ViewLocalization_NoMUI_Skip); } } else { // warning scope.LogWarning(CoreResources.Provisioning_Extensions_ViewLocalization_Skip); } }
public bool ValidateWebPartOnPages(ProvisioningTemplate template, TokenParser parser) { var web = cc.Web; var file = template.Files.First(); var folderName = parser.ParseString(file.Folder); var url = folderName + "/" + template.Connector.GetFilenamePart(file.Src); var resourceValues = parser.GetResourceTokenResourceValues(file.WebParts.First().Title); var ok = ValidatePartOnPage(parser, resourceValues, web, url); if (!ok) { return(false); } var page = template.Pages.First(); url = parser.ParseString(page.Url); resourceValues = parser.GetResourceTokenResourceValues(file.WebParts.First().Title); ok = ValidatePartOnPage(parser, resourceValues, web, url); return(ok); }
public static bool SetUserResourceValue(this UserResource userResource, string tokenValue, TokenParser parser) { bool isDirty = false; if (userResource != null && !String.IsNullOrEmpty(tokenValue)) { var resourceValues = parser.GetResourceTokenResourceValues(tokenValue); foreach (var resourceValue in resourceValues) { userResource.SetValueForUICulture(resourceValue.Item1, resourceValue.Item2); isDirty = true; } } return(isDirty); }
public static bool SetUserResourceValue(this UserResource userResource, string tokenValue, TokenParser parser) { bool isDirty = false; if (userResource != null && !String.IsNullOrEmpty(tokenValue)) { var resourceValues = parser.GetResourceTokenResourceValues(tokenValue); foreach (var resourceValue in resourceValues) { userResource.SetValueForUICulture(resourceValue.Item1, resourceValue.Item2); isDirty = true; } } return isDirty; }
public bool ValidateStructuralNavigation(ProvisioningTemplate template, TokenParser parser) { bool ok = true; var web = cc.Web; if (template.Navigation == null) { return(true); } if (template.Navigation.GlobalNavigation == null) { return(true); } if (template.Navigation.GlobalNavigation.NavigationType == GlobalNavigationType.Managed) { return(true); } var node = template.Navigation.GlobalNavigation.StructuralNavigation.NavigationNodes.First(); if (node.Title.ContainsResourceToken()) { var resourceValues = parser.GetResourceTokenResourceValues(node.Title); foreach (var resourceValue in resourceValues) { cc.PendingRequest.RequestExecutor.WebRequest.Headers["Accept-Language"] = resourceValue.Item1; cc.Load(web, w => w.Navigation, w => w.Navigation.TopNavigationBar); cc.ExecuteQueryRetry(); if (!cc.Web.IsSubSite()) { var firstNode = web.Navigation.TopNavigationBar.First(); if (!firstNode.Title.Equals(resourceValue.Item2)) { ok = false; } } } } return(ok); }
internal static void LocalizeView(this Microsoft.SharePoint.Client.View view, Web web, string token, TokenParser parser, PnPMonitoredScope scope) { if (CanUseAcceptLanguageHeaderForLocalization(web)) { var context = web.Context; var resourceValues = parser.GetResourceTokenResourceValues(token); foreach (var resourceValue in resourceValues) { // Save property with correct locale on the request to make it stick // http://sadomovalex.blogspot.no/2015/09/localize-web-part-titles-via-client.html context.PendingRequest.RequestExecutor.WebRequest.Headers["Accept-Language"] = resourceValue.Item1; view.Title = resourceValue.Item2; view.Update(); context.ExecuteQueryRetry(); } } else { // warning scope.LogWarning(CoreResources.Provisioning_Extensions_ViewLocalization_Skip); } }
private static void LocalizeParts(Web web, TokenParser parser, string url, WebPartCollection webParts, PnPMonitoredScope scope) { if (CanUseAcceptLanguageHeaderForLocalization(web)) { var context = web.Context; var allParts = web.GetWebParts(parser.ParseString(url)).ToList(); foreach (var webPart in webParts) { #if !SP2016 var partOnPage = allParts.FirstOrDefault(w => w.ZoneId == webPart.Zone && w.WebPart.ZoneIndex == webPart.Order); #else var partOnPage = allParts.FirstOrDefault(w => w.WebPart.ZoneIndex == webPart.Order); #endif if (webPart.Title.ContainsResourceToken() && partOnPage != null) { var resourceValues = parser.GetResourceTokenResourceValues(webPart.Title); foreach (var resourceValue in resourceValues) { // Save property with correct locale on the request to make it stick // http://sadomovalex.blogspot.no/2015/09/localize-web-part-titles-via-client.html context.PendingRequest.RequestExecutor.WebRequest.Headers["Accept-Language"] = resourceValue.Item1; partOnPage.WebPart.Properties["Title"] = resourceValue.Item2; partOnPage.SaveWebPartChanges(); context.ExecuteQueryRetry(); } } } context.PendingRequest.RequestExecutor.WebRequest.Headers.Remove("Accept-Language"); } else { // warning scope.LogWarning(CoreResources.Provisioning_Extensions_WebPartLocalization_Skip); } }