Exemplo n.º 1
0
 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);
     }
 }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 7
0
        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);
     }
 }
Exemplo n.º 11
0
 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);
     }
 }