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 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)) { navigationNode.TitleResource.SetValueForUICulture(resourceValue.Item1, 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 Model.NavigationNode ToDomainModelNavigationNode(this Microsoft.SharePoint.Client.NavigationNode node, Web web) { var result = new Model.NavigationNode { Title = node.Title, IsExternal = node.IsExternal, Url = node.Url.Replace(web.ServerRelativeUrl, "{site}"), }; node.Context.Load(node.Children); node.Context.ExecuteQueryRetry(); result.NavigationNodes.AddRange(from n in node.Children.AsEnumerable() select n.ToDomainModelNavigationNode(web)); return(result); }
internal static Model.NavigationNode ToDomainModelNavigationNode(this Microsoft.SharePoint.Client.NavigationNode node, Web web, bool PersistLanguage, CultureInfo currentCulture, int ParentNodeId = 0) { string nodeTitle = node.Title; #if !SP2013 if (PersistLanguage && !string.IsNullOrWhiteSpace(nodeTitle)) { if (UserResourceExtensions.PersistResourceValue($"NavigationNode_{ParentNodeId}_{node.Id}_Title", currentCulture.LCID, nodeTitle)) { nodeTitle = $"{{res:NavigationNode_{ParentNodeId}_{node.Id}_Title}}"; } } #endif var result = new Model.NavigationNode { Title = nodeTitle, IsExternal = node.IsExternal, Url = web.ServerRelativeUrl != "/" ? node.Url.Replace(web.ServerRelativeUrl, "{site}") : $"{{site}}{node.Url}" }; node.Context.Load(node.Children); #if !SP2013 var acceptLanguage = node.Context.PendingRequest.RequestExecutor.WebRequest.Headers["Accept-Language"]; if (PersistLanguage) { node.Context.PendingRequest.RequestExecutor.WebRequest.Headers["Accept-Language"] = currentCulture.Name; } #endif node.Context.ExecuteQueryRetry(); result.NavigationNodes.AddRange(from n in node.Children.AsEnumerable() select n.ToDomainModelNavigationNode(web, PersistLanguage, currentCulture, node.Id)); #if !SP2013 if (PersistLanguage) { node.Context.PendingRequest.RequestExecutor.WebRequest.Headers["Accept-Language"] = acceptLanguage; } #endif return(result); }