Reading Time: 2 minutes

Hi guys! Sometimes happened that we need to enable Alternate Language on already existing websites, maybe after a language pack installation or just simply after an Information Architecture creation.

You can do it manually from Site Settings page

  • <siteUrl>/_layouts/15/regionalsetng.aspx

Risultati immagini per sharepoint alternate language

But, what happened if you have a lot of sites and nested websites? Here you can find a short snippet could you help you

function EnableAlternateLanguageForAllSubWebs($web) {
    Write-Host "Enable alternate language started $web" -ForegroundColor Green  Write-Progress -Activity "setting alternate language " -Status "Enable alternate language is starting"  try{
        $spWeb = Get-SPWeb $web  if($spWeb -ne $null)  {
            $installed = [Microsoft.SharePoint.SPRegionalSettings]::GlobalInstalledLanguages   #region set language in sitecollection-root  $spWeb.IsMultiLingual = $true;
            $supportedCultures = $spWeb.SupportedUICultures;
            foreach ($lang in $installed)  {
                $cultureinfo = [System.Globalization.CultureInfo]::GetCultureInfo($lang.LCID);
                $exists = $supportedCultures | Where-Object{
                    $_.LCID -eq $lang.LCID
                }
                if ($exists -eq $null)   {
                    $spWeb.AddSupportedUICulture($cultureinfo)   Write-Host "Added" $cultureinfo.Name "to URL" $spWeb.Url
                }
            }
            $spWeb.Update()   #endregion  $subwebs = $spWeb.GetSubwebsForCurrentUser()  #region set language in subWebs of sitecollection-root  foreach($subweb in $subwebs)  {
                $subweb.IsMultiLingual = $true;
                $supportedCultures = $subweb.SupportedUICultures;
                foreach ($lang in $installed)  {
                    $cultureinfo = [System.Globalization.CultureInfo]::GetCultureInfo($lang.LCID);
                    $exists = $supportedCultures | Where-Object{
                        $_.LCID -eq $lang.LCID
                    }
                    if ($exists -eq $null)   {
                        $subweb.AddSupportedUICulture($cultureinfo)   Write-Host "Added" $cultureinfo.Name "to URL" $subweb.Url
                    }
                }
                #set language in news subsites  $subSubwebs = $subweb.GetSubwebsForCurrentUser()  foreach($subSubweb in $subSubwebs)   {
                    $subSubweb.IsMultiLingual = $true;
                    $SWsupportedCultures = $subSubweb.SupportedUICultures;
                    foreach ($lang in $installed)   {
                        $SWcultureinfo = [System.Globalization.CultureInfo]::GetCultureInfo($lang.LCID);
                        $SWexists = $SWsupportedCultures | Where-Object{
                            $_.LCID -eq $lang.LCID
                        }
                        if ($SWexists -eq $null)    {
                            $subSubweb.AddSupportedUICulture($SWcultureinfo)    Write-Host "Added" $SWcultureinfo.Name "to URL" $subSubweb.Url
                        }
                    }
                    $subSubweb.Update()
                }
                $subweb.Update()
            }
            #endregion  Write-Host "Enable alternate language finished $web" -ForegroundColor Green  Write-Progress -Activity "setting alternate language" -Status "Enable alternate language is finished"
        }
    }
    catch [System.Exception]  {
        throw $_.Exception;
    }
}

 

You can run it using SharePoint Powershell or importing SharePoint PS Snapin (don’t forget it)

# All scripts need to initiate SharePoint Snapin if not done
$spInstalled = Get-PSSnapin | Select-String Sharepoint
if (!$spInstalled)
{
    Add-PSSnapin Microsoft.Sharepoint.PowerShell
}

 

Have a nice day 😉

Note: C# code for adding alternate language support is illustrated in the MSDN in article: Understandingthe Multilingual User Interface here.

 

Leave a Reply

Your email address will not be published. Required fields are marked *