<?xml version="1.0" encoding="UTF-8" ?><!-- generator=Zoho Sites --><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><atom:link href="https://blog.icefire.ca/blogs/tag/sharepoint/feed" rel="self" type="application/rss+xml"/><title>The PointFire Blog - The PointFire Blog for Multilingual SharePoint #SharePoint</title><description>The PointFire Blog - The PointFire Blog for Multilingual SharePoint #SharePoint</description><link>https://blog.icefire.ca/blogs/tag/sharepoint</link><lastBuildDate>Tue, 15 Jul 2025 11:53:39 -0700</lastBuildDate><generator>http://zoho.com/sites/</generator><item><title><![CDATA[Big Changes to PnP PowerShell Scripts on September 8, 2024]]></title><link>https://blog.icefire.ca/blogs/post/big-changes-to-pnp-powershell-scripts-on-september-8-2024</link><description><![CDATA[The “PnP Management Shell” multi-tenant app registration will be deleted on September 8, 2024. This will affect every script that uses “Interactive” login to connect to SharePoint or to Microsoft Graph. PointFire is releasing its own script to solve the issue.]]></description><content:encoded><![CDATA[<div class="zpcontent-container blogpost-container "><div data-element-id="elm_lmk9h-FKQsO2ssDIaY0Qew" data-element-type="section" class="zpsection "><style type="text/css"></style><div class="zpcontainer-fluid zpcontainer"><div data-element-id="elm_FVJFHCJPTTqGvlEuqArt_A" data-element-type="row" class="zprow zprow-container zpalign-items- zpjustify-content- " data-equal-column=""><style type="text/css"></style><div data-element-id="elm_uqnvUw8KQlGcEIzHl6Hb1g" data-element-type="column" class="zpelem-col zpcol-12 zpcol-md-12 zpcol-sm-12 zpalign-self- "><style type="text/css"></style><div data-element-id="elm_DCeHYpFJQxiRcltFSTXL-w" data-element-type="text" class="zpelement zpelem-text "><style></style><div class="zptext zptext-align-center " data-editor="true"><div style="color:inherit;"><div style="color:inherit;"><p style="text-align:left;">On August 21, 2024 Vesa Juvonen, Principal Product Manager at Microsoft announced on behalf of the PnP PowerShell and CLI for Microsoft 365 groups that the <a href="https://pnp.github.io/blog/post/changes-pnp-management-shell-registration/" title="“PnP Management Shell” multi-tenant app registration would be deleted" target="_blank" rel="">“PnP Management Shell” multi-tenant app registration would be deleted</a> on September 8, 2024.&nbsp; This means that on that day, every script that uses the recommended “Interactive” login to connect to SharePoint or to Microsoft Graph will stop working.</p><p style="text-align:left;"><span><br></span></p><p style="text-align:left;"><span><br></span></p><p style="text-align:left;"><br></p><div style="color:inherit;"><p style="text-align:left;"><span style="font-size:16px;">This has a major impact on most people using PnP PowerShell scripts.&nbsp; The interactive login method is often the default method used, since it supports a lot of authentication methods including most forms of Multi-Factor Authentication (MFA), and it does not require tenant-specific parameters in the script.&nbsp; This allows PowerShell scripts to be signed for extra security.</span></p><p style="text-align:left;font-size:11pt;"><br></p><div style="color:inherit;"><p style="text-align:left;"><span style="font-size:16px;">Why is it called a multi-tenant app registration?&nbsp; This is because the maximum permissions that can be used by scripts that use Interactive connections to SharePoint are set in an AzureAD/EntraID app that is maintained by Microsoft Patterns and Practices (PnP) group in their tenant and is made available to be used by any tenant.&nbsp; The actual permissions are limited to the lower of those permissions and the permissions of the user that is logging in to SharePoint.</span></p><p style="text-align:left;font-size:11pt;"><br></p><div style="color:inherit;"><p style="text-align:left;"><span style="font-size:16px;">Until September 8, any tenant that wanted to use the “Interactive” login would have needed to invoke the “Register-PnPManagementShellAccess”&nbsp; command, once only, in order to have access to this “PnP Management Shell” app registration from within this tenant.&nbsp; Consenting to this could only be done by Azure AD administrators or Global administrators.&nbsp; After September 8, that consent within your tenant disappears because the original app registration itself will disappear, along with all its permissions.&nbsp; Anyone trying to use a script with Interactive login will fail, since the authentication relies on that app registration.</span></p></div>
</div></div></div></div></div></div><div data-element-id="elm_qtyk6Hfa8RXAHbr9SFZFhA" data-element-type="heading" class="zpelement zpelem-heading "><style></style><h3
 class="zpheading zpheading-style-none zpheading-align-left " data-editor="true"><div><p><span style="font-family:&quot;Work Sans&quot;;font-size:16px;font-weight:700;color:rgb(11, 27, 45);">What is the alternative?</span></p></div></h3></div>
<div data-element-id="elm_DPtJ0adMKRQhEBwJJuNXYA" data-element-type="text" class="zpelement zpelem-text "><style></style><div class="zptext zptext-align-left " data-editor="true"><div style="color:inherit;"><div style="color:inherit;"><p><span style="font-size:16px;">The alternative, according to Microsoft, is to create your own single-tenant app registration in your own tenant’s EntraID, and use a different form of Interactive login.&nbsp; A command to create such a single-tenant app registration is being prepared by the PnP group, but at the time of writing three days before the deadline, it has not yet been released as part of PnP PowerShell</span></p><p style="font-size:11pt;"><br></p><p><a href="https://pnp.github.io/powershell/cmdlets/Register-PnPEntraIDAppForInteractiveLogin.html" title="Register-PnPEntraIDAppForInteractiveLogin" target="_blank" rel="">Register-PnPEntraIDAppForInteractiveLogin</a></p><p style="font-size:11pt;"><br></p><div style="color:inherit;"><p><span style="font-size:16px;">With time running out, PointFire is releasing its own script, which uses existing PnP commands to register an app called “PointFire PnP login” in your own tenant.&nbsp; It also stores the app ID in an environment variable named ENTRAID_CLIENT_ID that is used by all scripts that use the “Interactive” parameter, overriding the “PnP Management Shell” app registration that would normally be used.&nbsp; This way, existing scripts will not have to be modified.&nbsp; The new script is called “UserAuthentication.ps1” and will be included in all upcoming releases of PointFire 365 and PointFire Translator, but you can also request it directly from PointFire support.</span></p></div></div></div></div>
</div></div></div></div></div></div> ]]></content:encoded><pubDate>Thu, 05 Sep 2024 10:37:17 -0400</pubDate></item><item><title><![CDATA[PointFire 365 will soon have a new look and new architecture]]></title><link>https://blog.icefire.ca/blogs/post/pointfire-365-will-soon-have-a-new-look-and-new-architecture</link><description><![CDATA[<img align="left" hspace="5" src="https://blog.icefire.ca/SharePoint-Addin-retirement-PointFire-blog.png"/>PointFire 365 is getting a new look. This is part of our plan to consolidate the two apps, classic and modern, into a single app. Translate any SharePoint page in seconds]]></description><content:encoded><![CDATA[<div class="zpcontent-container blogpost-container "><div data-element-id="elm_rLXUI3_bSM-iz9EZSj1Y7Q" data-element-type="section" class="zpsection "><style type="text/css"></style><div class="zpcontainer-fluid zpcontainer"><div data-element-id="elm_BZU8lkazSKezoEOwiLoSfg" data-element-type="row" class="zprow zprow-container zpalign-items- zpjustify-content- " data-equal-column=""><style type="text/css"></style><div data-element-id="elm_r7XSi_rDThKET2Uvg7O2oA" data-element-type="column" class="zpelem-col zpcol-12 zpcol-md-12 zpcol-sm-12 zpalign-self- "><style type="text/css"></style><div data-element-id="elm_7y81QwMnSQeC1XzQ4R8N6g" data-element-type="text" class="zpelement zpelem-text "><style></style><div class="zptext zptext-align-center " data-editor="true"><div style="color:inherit;"><p style="text-align:left;"><span style="font-size:16px;">You may have seen the message in the Message Center or in the App Catalog about the demise of SharePoint Add-ins in 2026.&nbsp; The upcoming version 3.0 of PointFire 365 will retire its own add-in at the same time as it brings in the new look.</span></p></div></div>
</div><div data-element-id="elm_WrAO8ZKSCo1edU1ujn0l0A" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_WrAO8ZKSCo1edU1ujn0l0A"] .zpimage-container figure img { width: 516px !important ; height: 90px !important ; } } @media (max-width: 991px) and (min-width: 768px) { [data-element-id="elm_WrAO8ZKSCo1edU1ujn0l0A"] .zpimage-container figure img { width:516px ; height:90px ; } } @media (max-width: 767px) { [data-element-id="elm_WrAO8ZKSCo1edU1ujn0l0A"] .zpimage-container figure img { width:516px ; height:90px ; } } [data-element-id="elm_WrAO8ZKSCo1edU1ujn0l0A"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="left" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-left zpimage-size-original zpimage-tablet-fallback-original zpimage-mobile-fallback-original hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/SharePoint-Addins-PointFire-Blog.png" width="516" height="90" loading="lazy" size="original" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_UIFOL2ldd7Ir3jK9l53wtQ" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_UIFOL2ldd7Ir3jK9l53wtQ"] .zpimage-container figure img { width: 624px !important ; height: 326px !important ; } } @media (max-width: 991px) and (min-width: 768px) { [data-element-id="elm_UIFOL2ldd7Ir3jK9l53wtQ"] .zpimage-container figure img { width:624px ; height:326px ; } } @media (max-width: 767px) { [data-element-id="elm_UIFOL2ldd7Ir3jK9l53wtQ"] .zpimage-container figure img { width:624px ; height:326px ; } } [data-element-id="elm_UIFOL2ldd7Ir3jK9l53wtQ"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="left" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-left zpimage-size-original zpimage-tablet-fallback-original zpimage-mobile-fallback-original hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/SharePoint-Addin-retirement-PointFire-blog.png" width="624" height="326" loading="lazy" size="original" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_9TaMD5QeMAt9jRhdy2RH6Q" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_9TaMD5QeMAt9jRhdy2RH6Q"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div style="color:inherit;"><div style="color:inherit;"><p><span style="font-size:16px;"><br></span></p><p><span style="font-size:16px;">Currently, PointFire 365 has two apps, both of which must be added to the site, named PointFire 365 and PointFire 365 Modern.&nbsp; In rough terms, PointFire 365 handles classic pages and pages in classic mode, while PointFire 365 handles modern pages.&nbsp; To use Microsoft’s terminology, “PointFire 365” is an add-in and “PointFire 365 modern” is an app.&nbsp; To avoid redundant code, the two apps (formally an app and an add-in) work hand in hand.</span></p><p><span style="font-size:16px;">In recent years, SPFx has added a lot of functionality that it was missing, to the point that it is now possible to put all the functionality into a single app.&nbsp; The project for doing this started long before the Microsoft announcement.</span></p><p style="font-size:11pt;"><br></p><p><span style="font-size:16px;">Another aspect of this new version is changing a lot of the popup and configuration page from full pages as they mostly are now, to panels on the right of the page, as you often see in modern apps and as you have doubtless seen while editing modern pages.&nbsp; As it happens, doing popups and pages is something that is difficult to do in a modern app and we were planning to do away with those anyway.&nbsp; Doing the architecture change and the UI change at the same time makes sense.</span></p><p style="font-size:11pt;"><br></p><p><span style="font-size:16px;">Version 2.7 of PointFire 365 is the last one where the classic app is mandatory.&nbsp; Version 3.0 will still have both the classic and the modern app, but the classic app will not have much functionality other than helping with the transition for users who are used to the current apps.&nbsp; This will happen this summer 2024, long before Microsoft’s 2026 deadline, so the impact on existing users will be minimal.</span></p></div></div></div>
</div><div data-element-id="elm_aw8Y_ZPlzVsDR6Ke3VjNFA" data-element-type="button" class="zpelement zpelem-button "><style> [data-element-id="elm_aw8Y_ZPlzVsDR6Ke3VjNFA"].zpelem-button{ border-radius:1px; } </style><div class="zpbutton-container zpbutton-align-left "><style type="text/css"> [data-element-id="elm_aw8Y_ZPlzVsDR6Ke3VjNFA"] .zpbutton.zpbutton-type-primary{ background-color:#3C98DE !important; } </style><a class="zpbutton-wrapper zpbutton zpbutton-type-primary zpbutton-size-md zpbutton-style-roundcorner " href="javascript:;"><span class="zpbutton-content">Download PointFire free trial</span></a></div>
</div></div></div></div></div></div> ]]></content:encoded><pubDate>Wed, 10 Apr 2024 09:44:31 -0400</pubDate></item><item><title><![CDATA[Localize your SPFx solutions with PointFire Localizer]]></title><link>https://blog.icefire.ca/blogs/post/localize-your-spfx-solutions-with-pointfire-localizer1</link><description><![CDATA[<img align="left" hspace="5" src="https://blog.icefire.ca/PointFire-Localizer-Github-SPFx.png"/>Managing multilingual SharePoint Framework (SPFx) solutions? We just released a new open-source project on Github: PointFire Localizer. It's a GitHub action that helps you translate your localization files for your SPFx solutions.]]></description><content:encoded><![CDATA[<div class="zpcontent-container blogpost-container "><div data-element-id="elm_CKS1HxPaRzq2qfGHf45Iuw" data-element-type="section" class="zpsection "><style type="text/css"></style><div class="zpcontainer-fluid zpcontainer"><div data-element-id="elm_WmLYjZJARU6YPMa-rCDVMg" data-element-type="row" class="zprow zprow-container zpalign-items- zpjustify-content- " data-equal-column=""><style type="text/css"></style><div data-element-id="elm_ItIxS8-iT9GmtujFJtfw3A" data-element-type="column" class="zpelem-col zpcol-12 zpcol-md-12 zpcol-sm-12 zpalign-self- "><style type="text/css"> [data-element-id="elm_ItIxS8-iT9GmtujFJtfw3A"].zpelem-col{ border-radius:1px; } </style><div data-element-id="elm_5uZQgTfFS1e8j-O3TyoeMQ" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_5uZQgTfFS1e8j-O3TyoeMQ"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-center " data-editor="true"><div style="color:inherit;"><div style="color:inherit;"><p style="text-align:left;"><span style="font-size:16px;">Managing multilingual SharePoint Framework (SPFx) solutions can get tricky as you need to ensure all translations are in place and take care of localization files from languages you need help understanding yourself. This was a problem we faced when developing our products.</span></p><p style="text-align:left;"><span style="font-size:16px;">&nbsp;</span></p><p style="text-align:left;"><span style="font-size:16px;">To be sure we always included all localization key/value pairs in our releases, we created some scripts that were only internally used.</span></p><p style="text-align:left;"><span style="font-size:16px;">&nbsp;</span></p><p style="text-align:left;"><span>We decided to make those scripts available to the community for free so you can also benefit from them. That is why we created a new open-source project called <a href="https://github.com/IceFireStudios/pointfire-localizer-action" rel="">PointFire Localizer</a>. This project is a GitHub Action that helps you translate your localization files for your SPFx solutions.</span></p><p style="text-align:left;"><span><br></span></p></div></div></div>
</div><div data-element-id="elm_q1_D6Xd7af1K2TdiStlVUg" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_q1_D6Xd7af1K2TdiStlVUg"] .zpimage-container figure img { width: 500px ; height: 215.71px ; } } @media (max-width: 991px) and (min-width: 768px) { [data-element-id="elm_q1_D6Xd7af1K2TdiStlVUg"] .zpimage-container figure img { width:500px ; height:215.71px ; } } @media (max-width: 767px) { [data-element-id="elm_q1_D6Xd7af1K2TdiStlVUg"] .zpimage-container figure img { width:500px ; height:215.71px ; } } [data-element-id="elm_q1_D6Xd7af1K2TdiStlVUg"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="left" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-left zpimage-size-medium zpimage-tablet-fallback-medium zpimage-mobile-fallback-medium hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/PointFire-Localizer-Github-SPFx.png" width="500" height="215.71" loading="lazy" size="medium" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_90MfQuymlvrY4hZON5QPTg" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_90MfQuymlvrY4hZON5QPTg"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div style="color:inherit;"><div style="color:inherit;"><p><br></p><p>This article shows you how to use PointFire Localizer to localize your SPFx solutions.</p><div style="color:inherit;"><div style="text-align:center;"></div></div></div></div></div>
</div><div data-element-id="elm_RASCClQeakuOpvr9QWcegw" data-element-type="heading" class="zpelement zpelem-heading "><style> [data-element-id="elm_RASCClQeakuOpvr9QWcegw"].zpelem-heading { border-radius:1px; } </style><h2
 class="zpheading zpheading-style-none zpheading-align-left " data-editor="true"><div><h2><span style="font-family:&quot;Work Sans&quot;;font-size:20px;font-weight:700;color:rgb(11, 27, 45);">Maintaining localization files</span></h2></div></h2></div>
<div data-element-id="elm_cvFEU8C9jlVE9sKQz5pbXg" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_cvFEU8C9jlVE9sKQz5pbXg"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div style="color:inherit;"><div style="color:inherit;"><p><span style="font-size:16px;">Every SPFx component has its own localization folder (`loc`) which contains a `en-us.js` and `myStrings.d.ts` file. There are ways to simplify this, like using a <a href="https://www.eliostruyf.com/simplify-localization-in-sharepoint-framework-projects/">single localization file</a> for all components, but eventually, you still must maintain all the key/value pairs for all languages.</span></p><p><span style="font-size:16px;"><br></span></p><div style="color:inherit;"><div style="text-align:center;"><span style="font-style:italic;">You can read more about simplifying localization in SPFx projects in the following&nbsp;article:&nbsp;</span></div><div style="text-align:center;"><div><span style="font-style:italic;"><a href="https://www.eliostruyf.com/simplify-localization-in-sharepoint-framework-projects/" rel="">Simplify localization in SharePoint Framework projects · Elio Struyf</a></span></div></div></div><p><span style="font-size:16px;">&nbsp;</span></p><p><span style="font-size:16px;">For instance, starting with a new SPFx project will get a `loc` folder with the `en-us.js` and `myStrings.d.ts` files. If you want to add French, you must create a `fr-fr.js` localization file and include the same key/value pairs as in the `en-us.js` file.</span></p><p><span style="font-size:16px;"><br></span></p><div style="color:inherit;"><div>```javascript</div><div>define([], function() {</div><div>return {</div><div>&amp;quot;PropertyPaneDescription&amp;quot;: &amp;quot;Description&amp;quot;,</div><div>&amp;quot;BasicGroupName&amp;quot;: &amp;quot;Group Name&amp;quot;,</div><div>&amp;quot;DescriptionFieldLabel&amp;quot;: &amp;quot;Description Field&amp;quot;</div><div>}</div><div>});</div><div>```</div></div></div></div></div>
</div><div data-element-id="elm_iphr8pGoA2AIItCzHjGQ_Q" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_iphr8pGoA2AIItCzHjGQ_Q"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div style="color:inherit;"><p><br></p><p>The tricky part is that you need to keep all those files in sync, so it gets more complicated with the more languages you need to support. Our PointFire Localizer solution helps you localize your SPFx solution, so you do not have to worry about missing translations.</p></div></div>
</div><div data-element-id="elm_0rwyW5k0svX5PtcETZpU6A" data-element-type="heading" class="zpelement zpelem-heading "><style> [data-element-id="elm_0rwyW5k0svX5PtcETZpU6A"].zpelem-heading { border-radius:1px; } </style><h2
 class="zpheading zpheading-style-none zpheading-align-left " data-editor="true"><div><div><h2><span style="font-size:20px;font-weight:700;font-family:&quot;Work Sans&quot;;color:rgb(11, 27, 45);">What is PointFire Localizer?</span></h2></div><div style="color:inherit;"><div></div></div></div></h2></div>
<div data-element-id="elm_dvbeYPBvGuniaypkVdMPkQ" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_dvbeYPBvGuniaypkVdMPkQ"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div style="color:inherit;"><p style="font-size:12pt;">PointFire Localizer is a GitHub Action that helps you translate your localization files for your SPFx solutions. The <a href="https://azure.microsoft.com/en-us/products/ai-services/ai-translator">Azure AI Translator</a> is used to translate your localization files to the desired languages.</p><p style="font-size:12pt;">&nbsp;</p><p style="font-size:12pt;">The GitHub Action adds the missing translations to your localization files so you can be sure that all key/value pairs are included in all languages. When a human has already translated a key, it will not be overwritten by machine translation. The GitHub Action favors human translations.</p><p style="font-size:12pt;">&nbsp;</p><p style="font-size:12pt;">Our GitHub Action is designed to be easily integrated into your existing build pipeline. Thus, you can automatically translate your localization files when you build your SPFx solution.</p></div></div>
</div><div data-element-id="elm_jluHSUVebuErv8KSIsCrKQ" data-element-type="heading" class="zpelement zpelem-heading "><style> [data-element-id="elm_jluHSUVebuErv8KSIsCrKQ"].zpelem-heading { border-radius:1px; } </style><h2
 class="zpheading zpheading-style-none zpheading-align-left " data-editor="true"><h2><span style="font-family:&quot;Work Sans&quot;;font-size:20px;font-weight:700;color:rgb(11, 27, 45);">How to use PointFire Localizer?</span></h2></h2></div>
<div data-element-id="elm_gGf9h19PtpJz9tKchck2sw" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_gGf9h19PtpJz9tKchck2sw"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div style="color:inherit;"><p style="font-size:12pt;">As our builds are already running on GitHub Actions, we created a GitHub Action that can be used in your workflows. This way, you can easily integrate the localization process into your existing build pipeline, and you are sure that on release, all localization files will include all key/value pairs for all languages.</p><p style="font-size:12pt;">&nbsp;</p><p style="font-size:12pt;">Here you can see an example of a GitHub Actions workflow for packaging a SharePoint Framework solution:</p><p style="font-size:12pt;"><br></p><div style="color:inherit;"><span style="color:inherit;"><p><span style="font-size:12pt;">```yaml</span></p><p><span style="font-size:12pt;">name: Build</span></p><br><p><span style="font-size:12pt;">on:</span></p><p><span style="font-size:12pt;">&nbsp;push:</span></p><p><span style="font-size:12pt;">&nbsp;branches:</span></p><p><span style="font-size:12pt;">&nbsp;- dev</span></p><p><span style="font-size:12pt;">&nbsp;- main</span></p><p><span style="font-size:12pt;">&nbsp;workflow_dispatch:</span></p><br><p><span style="font-size:12pt;">jobs:</span></p><p><span style="font-size:12pt;">&nbsp;build:</span></p><p><span style="font-size:12pt;">&nbsp;runs-on: ubuntu-latest</span></p><p><span style="font-size:12pt;">&nbsp;steps:</span></p><p><span style="font-size:12pt;">&nbsp;- uses: actions/checkout@v4</span></p><br><p><span style="font-size:12pt;">&nbsp;- uses: actions/setup-node@v4</span></p><p><span style="font-size:12pt;">&nbsp;with:</span></p><p><span style="font-size:12pt;">&nbsp;node-version: 18</span></p><p><span style="font-size:12pt;">&nbsp;cache: 'npm'</span></p><br><p><span style="font-size:12pt;">&nbsp;- name: Install dependencies</span></p><p><span style="font-size:12pt;">&nbsp;run: npm ci</span></p><br><p><span style="font-size:12pt;">&nbsp;- name: Package solution</span></p><p><span style="font-size:12pt;">&nbsp;run: gulp bundle --ship &amp;&amp; gulp package-solution --ship</span></p><br><p><span style="font-size:12pt;">&nbsp;- name: Upload sppkg</span></p><p><span style="font-size:12pt;">&nbsp;uses: actions/upload-artifact@v4</span></p><p><span style="font-size:12pt;">&nbsp;with:</span></p><p><span style="font-size:12pt;">&nbsp;name: spfx-solution</span></p><p><span style="font-size:12pt;">&nbsp;path: ./**/sharepoint/solution/*.sppkg</span></p><p><span style="font-size:12pt;">```</span></p></span></div><p style="font-size:12pt;">&nbsp;</p></div></div>
</div><div data-element-id="elm_bDZ8NwlpAtC5TNWq6F0PxA" data-element-type="heading" class="zpelement zpelem-heading "><style> [data-element-id="elm_bDZ8NwlpAtC5TNWq6F0PxA"].zpelem-heading { border-radius:1px; } </style><h2
 class="zpheading zpheading-style-none zpheading-align-left " data-editor="true"><h3><span style="font-family:&quot;Work Sans&quot;;font-size:20px;font-weight:700;color:rgb(11, 27, 45);">Add the Azure AI Translator API key to your GitHub repository</span></h3></h2></div>
<div data-element-id="elm_koTHOiZkoc1wxFVsRmdR7A" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_koTHOiZkoc1wxFVsRmdR7A"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div style="color:inherit;"><p style="font-size:12pt;">The prerequisite for using PointFire Localizer is that you have an Azure AI Translator service. You can create a new service in the Azure Portal. Once you have created the service, either the free or the paid tier, you can get the API key from the Azure Portal. You can find more information in the <a href="https://learn.microsoft.com/en-us/azure/ai-services/translator/create-translator-resource#get-your-authentication-keys-and-endpoint">get your authentication keys and endpoint</a> article.</p><p style="font-size:12pt;"><br></p><p style="font-size:12pt;"><span style="font-style:italic;"><span style="color:inherit;">You can make use of the free tier from Azure AI Translator.</span><br></span></p><p style="font-size:12pt;">&nbsp;</p><p style="font-size:12pt;">Follow the next steps to add your Azure AI Translator API key to your GitHub repository:</p><ul><li>Go to your GitHub repository</li><li>Go to the `Settings` tab</li><li>Go to the `Secrets and variables` section and click on `Actions`</li><li>Click on the `New repository secret` button</li><li>Add a new secret with the name `TRANSLATOR_API_KEY` and the value of your Azure AI Translator API key</li></ul><p style="font-size:12pt;">&nbsp;</p><p style="font-size:12pt;">Once you have added the Azure AI Translator API key to your GitHub repository, you can add the PointFire Localizer GitHub Action to your workflow.</p><p style="font-size:12pt;">&nbsp;</p><p style="font-size:12pt;">There are two ways how you can use PointFire Localizer in your workflow:</p><p style="font-size:12pt;">&nbsp;</p><p style="font-size:12pt;">1.<span style="font-size:7pt;">&nbsp; </span>By a predefined list of locales</p><p style="font-size:12pt;">2.<span style="font-size:7pt;">&nbsp; </span>By automatically detecting the locales</p></div></div>
</div><div data-element-id="elm_hIRUy9IXePFBxwfAffJYHQ" data-element-type="heading" class="zpelement zpelem-heading "><style> [data-element-id="elm_hIRUy9IXePFBxwfAffJYHQ"].zpelem-heading { border-radius:1px; } </style><h2
 class="zpheading zpheading-style-none zpheading-align-left " data-editor="true"><h3><span style="font-family:&quot;Work Sans&quot;;font-size:20px;font-weight:700;color:rgb(11, 27, 45);">Using a predefined list of locales</span></h3></h2></div>
<div data-element-id="elm_iPvd8Oo5jM1SNeU3D3h3GQ" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_iPvd8Oo5jM1SNeU3D3h3GQ"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div style="color:inherit;"><p style="font-size:12pt;">If you want to use a predefined list of locales, you can add the following step to your workflow file right after the `install dependencies` step:</p><p style="font-size:12pt;"><br></p><p><span style="font-size:12pt;">```yaml</span></p><p><span style="font-size:12pt;">- name: PointFire Localizer</span></p><p><span style="font-size:12pt;">&nbsp;uses: IceFireStudios/pointfire-localizer-action@v1.0.0</span></p><p><span style="font-size:12pt;">&nbsp;with:</span></p><p><span style="font-size:12pt;">&nbsp;api-key: ${{ secrets.TRANSLATOR_API_KEY }}</span></p><p><span style="font-size:12pt;">&nbsp;api-region: &quot;westeurope&quot;</span></p><p><span style="font-size:12pt;">&nbsp;default-locale: &quot;en-us&quot;</span></p><p><span style="font-size:12pt;">&nbsp;locales: &quot;nl-nl,fr-fr,de-de&quot;</span></p><p><span style="font-size:12pt;">&nbsp;summary: true</span></p><p><span style="font-size:12pt;">```</span></p><p><span style="font-size:12pt;"><br></span></p></div></div>
</div><div data-element-id="elm_WQQSOVr23l3pakzs8glXEw" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_WQQSOVr23l3pakzs8glXEw"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div style="color:inherit;"><p style="font-size:12pt;">In this example, we use the predefined list of locales `nl-nl,fr-fr,de-de` and the default locale `en-us`.</p><p style="font-size:12pt;">&nbsp;</p><p style="font-size:12pt;">The GitHub Action will do the following:</p><p style="font-size:12pt;">&nbsp;</p><p style="font-size:12pt;">·<span style="font-size:7pt;">&nbsp;</span>It will first look for all the `en-us.js` files in the SPFx solution</p><p style="font-size:12pt;">·<span style="font-size:7pt;">&nbsp;</span>It will then translate all the missing or empty key/value pairs to the locales `nl-nl`, `fr-fr`, and `de-de`</p><p style="font-size:12pt;">o<span style="font-size:7pt;">&nbsp;</span>If a localization file does not exist, it will create a new one</p><p style="font-size:12pt;">o<span style="font-size:7pt;">&nbsp;</span>If a localization file already exists, it will add the missing key/value pairs</p><p style="font-size:12pt;">&nbsp;</p><p style="font-size:12pt;">The advantage of this approach is that those localization files can be created during the build process, so you do not have to make them manually if there are no human translations available.</p></div></div>
</div><div data-element-id="elm_tIua8ta12xrorHpa0mfC0Q" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_tIua8ta12xrorHpa0mfC0Q"] .zpimage-container figure img { width: 500px ; height: 261.56px ; } } @media (max-width: 991px) and (min-width: 768px) { [data-element-id="elm_tIua8ta12xrorHpa0mfC0Q"] .zpimage-container figure img { width:500px ; height:261.56px ; } } @media (max-width: 767px) { [data-element-id="elm_tIua8ta12xrorHpa0mfC0Q"] .zpimage-container figure img { width:500px ; height:261.56px ; } } [data-element-id="elm_tIua8ta12xrorHpa0mfC0Q"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="left" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-left zpimage-size-medium zpimage-tablet-fallback-medium zpimage-mobile-fallback-medium hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/PointFire-Localizer-Githib-Localization-Summary.png" width="500" height="261.56" loading="lazy" size="medium" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_8QlHmyMIB04pp6O7JRAHqg" data-element-type="heading" class="zpelement zpelem-heading "><style> [data-element-id="elm_8QlHmyMIB04pp6O7JRAHqg"].zpelem-heading { border-radius:1px; } </style><h2
 class="zpheading zpheading-style-none zpheading-align-left " data-editor="true"><h3><span style="font-size:20px;font-family:&quot;Work Sans&quot;;font-weight:700;color:rgb(11, 27, 45);">Automatically detecting the locales</span></h3></h2></div>
<div data-element-id="elm_uvEn1MpGi-9y44oI5n2kzQ" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_uvEn1MpGi-9y44oI5n2kzQ"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div style="color:inherit;"><p style="font-size:12pt;">If you want to detect the locales automatically, you can add the following step to your workflow file right after the `install dependencies` step:</p><p style="font-size:12pt;"><br></p><p><span style="font-size:12pt;">```yaml</span></p><p><span style="font-size:12pt;">- name: PointFire Localizer</span></p><p><span style="font-size:12pt;">&nbsp;uses: IceFireStudios/pointfire-localizer-action@v1.0.0</span></p><p><span style="font-size:12pt;">&nbsp;with:</span></p><p><span style="font-size:12pt;">&nbsp;api-key: ${{ secrets.TRANSLATOR_API_KEY }}</span></p><p><span style="font-size:12pt;">&nbsp;api-region: &quot;westeurope&quot;</span></p><p><span style="font-size:12pt;">&nbsp;default-locale: &quot;en-us&quot;</span></p><p><span style="font-size:12pt;">&nbsp;summary: true</span></p><p><span style="font-size:12pt;">```</span></p><p style="font-size:12pt;"><span style="color:inherit;"></span></p><div><span style="font-size:12pt;"><br></span></div></div></div>
</div><div data-element-id="elm_cPWaOlFiUIKFSEPotrBrcg" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_cPWaOlFiUIKFSEPotrBrcg"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div style="color:inherit;"><p style="font-size:12pt;">In this example, we are using the default locale `en-us`. As we did not specify any locales, the GitHub Action will automatically detect them based on the existing localization files.</p><p style="font-size:12pt;">&nbsp;</p><p style="font-size:12pt;">The GitHub Action will do the following:</p><p style="font-size:12pt;">&nbsp;</p><p style="font-size:12pt;">·<span style="font-size:7pt;">&nbsp;</span>It will first look for all the `en-us.js` files in the SPFx solution</p><p style="font-size:12pt;">·<span style="font-size:7pt;">&nbsp;</span>It will retrieve the linked locales per the default locale</p><p style="font-size:12pt;">·<span style="font-size:7pt;">&nbsp;</span>It will then translate all the missing or empty key/value pairs to the linked locales</p><p style="font-size:12pt;">&nbsp;</p><p style="font-size:12pt;">In this case, the GitHub Action will only translate the existing locale files in the SPFx solution.</p></div></div>
</div><div data-element-id="elm_cblqxh7jiVu4GYOm1LWGzQ" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_cblqxh7jiVu4GYOm1LWGzQ"] .zpimage-container figure img { width: 500px ; height: 261.56px ; } } @media (max-width: 991px) and (min-width: 768px) { [data-element-id="elm_cblqxh7jiVu4GYOm1LWGzQ"] .zpimage-container figure img { width:500px ; height:261.56px ; } } @media (max-width: 767px) { [data-element-id="elm_cblqxh7jiVu4GYOm1LWGzQ"] .zpimage-container figure img { width:500px ; height:261.56px ; } } [data-element-id="elm_cblqxh7jiVu4GYOm1LWGzQ"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="left" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-left zpimage-size-medium zpimage-tablet-fallback-medium zpimage-mobile-fallback-medium hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/PointFire-Localizer-Githib-Localization-Summary-2.png" width="500" height="261.56" loading="lazy" size="medium" data-lightbox="true"/></picture></span></figure></div>
</div></div></div></div></div></div> ]]></content:encoded><pubDate>Mon, 25 Mar 2024 15:02:44 -0400</pubDate></item><item><title><![CDATA[Multilingual proofing of SharePoint pages]]></title><link>https://blog.icefire.ca/blogs/post/multilingual-proofing-of-sharepoint-pages</link><description><![CDATA[<img align="left" hspace="5" src="https://blog.icefire.ca/PointFire-blog-SharePoint-multilingual-proofing-4.png"/>Microsoft was rolled out Multilingual proofing for SharePoint. We take a deep dive into its capabilities and limitations.]]></description><content:encoded><![CDATA[<div class="zpcontent-container blogpost-container "><div data-element-id="elm_coBEfdG2TIeY6mTKiMQRAw" data-element-type="section" class="zpsection "><style type="text/css"></style><div class="zpcontainer-fluid zpcontainer"><div data-element-id="elm_fx6aJOOnRSuL-mrH132s7A" data-element-type="row" class="zprow zprow-container zpalign-items- zpjustify-content- " data-equal-column=""><style type="text/css"> [data-element-id="elm_fx6aJOOnRSuL-mrH132s7A"].zprow{ border-radius:1px; } </style><div data-element-id="elm_D95NntH7Ss-qkSXyLcvZdQ" data-element-type="column" class="zpelem-col zpcol-12 zpcol-md-12 zpcol-sm-12 zpalign-self- "><style type="text/css"></style><div data-element-id="elm_qOJ77SI_QR-_NcPLx40UzQ" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_qOJ77SI_QR-_NcPLx40UzQ"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-center " data-editor="true"><div style="color:inherit;"><div style="color:inherit;"><p style="text-align:left;">We saw in April 2022, when SharePoint introduced the <a href="/Category-blog#/blogs/post/sharepoint-microsoft-editor-how-to-overcome-language-issues" title="Microsoft editor to the SharePoint page editing" rel="">Microsoft edit</a><a href="/Category-blog#/blogs/post/sharepoint-microsoft-editor-how-to-overcome-language-issues" title="Microsoft editor to the SharePoint page editing" rel="">or to the SharePoint page editing</a> experience, that it was not able to detect the language of the text, so it would often fill the screen with red squiggles when there was a different language.&nbsp; Luckily, by popular demand a few weeks later they rolled out a way to turn it off.&nbsp; But as of a few weeks ago, language detection is here.&nbsp; Multilingual proofing for SharePoint editing has been rolled out.</p><p style="text-align:left;"><span style="font-size:16px;"><br></span></p><p style="text-align:left;"><span style="font-size:16px;">Now it is possible to have proofing in several languages at once, as you see in this picture</span></p><p style="text-align:left;"><span style="font-size:16px;"><br></span></p></div></div></div>
</div><div data-element-id="elm_Ei5Po4Up05Ar7NMALt5Cvg" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_Ei5Po4Up05Ar7NMALt5Cvg"] .zpimage-container figure img { width: 796px !important ; height: 400px !important ; } } @media (max-width: 991px) and (min-width: 768px) { [data-element-id="elm_Ei5Po4Up05Ar7NMALt5Cvg"] .zpimage-container figure img { width:796px ; height:400px ; } } @media (max-width: 767px) { [data-element-id="elm_Ei5Po4Up05Ar7NMALt5Cvg"] .zpimage-container figure img { width:796px ; height:400px ; } } [data-element-id="elm_Ei5Po4Up05Ar7NMALt5Cvg"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="left" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-left zpimage-size-original zpimage-tablet-fallback-original zpimage-mobile-fallback-original hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/PointFire-blog-SharePoint-multilingual-proofing-1.png" width="796" height="400" loading="lazy" size="original" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_vVFCt60eIgW03fPlnBWGaQ" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_vVFCt60eIgW03fPlnBWGaQ"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div style="color:inherit;"><div style="color:inherit;"><p><span style="font-size:16px;"><br></span></p><p><span style="font-size:16px;">As you can see it correctly picked up typos in the English text, in the French text and in the German text, but it does not do the Portuguese text, it put squiggles under each of those words.</span></p><p><span style="font-size:16px;">&nbsp;</span></p><p><span style="font-size:16px;">How did I configure it to get those results?&nbsp; First let’s look at the announcement in the admin centre’s Message Centre.</span></p><p><span style="font-size:16px;"><br></span></p></div></div></div>
</div><div data-element-id="elm_H5BAPpGEqxTdqsFkq5P4ow" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_H5BAPpGEqxTdqsFkq5P4ow"] .zpimage-container figure img { width: 560px !important ; height: 502px !important ; } } @media (max-width: 991px) and (min-width: 768px) { [data-element-id="elm_H5BAPpGEqxTdqsFkq5P4ow"] .zpimage-container figure img { width:560px ; height:502px ; } } @media (max-width: 767px) { [data-element-id="elm_H5BAPpGEqxTdqsFkq5P4ow"] .zpimage-container figure img { width:560px ; height:502px ; } } [data-element-id="elm_H5BAPpGEqxTdqsFkq5P4ow"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="left" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-left zpimage-size-original zpimage-tablet-fallback-original zpimage-mobile-fallback-original hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/PointFire-blog-SharePoint-multilingual-proofing-2.png" width="560" height="502" loading="lazy" size="original" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_BgtYRLCN-iEbwOMhVJfP-Q" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_BgtYRLCN-iEbwOMhVJfP-Q"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div style="color:inherit;"><div style="color:inherit;"><p><span><br></span></p><p><span style="font-size:16px;">It’s not much to go on, but further down it also says this: “The Microsoft Editor Spellchecker, now integrated in SharePoint pages, will now be able to proof text in multiple languages. In addition to supporting the Page language, Editor now proofs in the M365 language and the Edge browser language. Any word in any of these three languages, will be spell checked appropriately. ”</span></p><p><span style="font-size:16px;"><br></span></p><p><span style="font-size:16px;"></span></p><div style="color:inherit;"><p><span style="font-size:16px;">What are these three languages?&nbsp; It refers to the “Page language”.&nbsp; The page language usually means the base language of the site, but if you have the multilingual page publishing feature activated, it can also mean the language of the copied page that is created for you to translate.&nbsp; It also refers to “the M365 language”, and it is a bit mistaken about that.&nbsp; What it actually means is the Office 365 <u>profile</u> language, which is not necessarily the same as the Microsoft 365 <u>account</u> language.&nbsp; The other one is the “Edge browser language”.&nbsp; Of course it doesn’t have to be Edge, all browsers have the ability to list the languages that you have configured the browser for.</span></p><p><span style="font-size:16px;"><br></span></p><p><span style="font-size:16px;">Let’s test the feature.&nbsp; First, I turned off Chrome’s own spell checking and confirmed which language the browser was configured for.&nbsp; Edge and other browsers all have similar settings.</span></p><p><span><br></span></p></div></div></div></div>
</div><div data-element-id="elm_dw7QP2fT0mRoHP0Iy6vwFA" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_dw7QP2fT0mRoHP0Iy6vwFA"] .zpimage-container figure img { width: 1064px !important ; height: 616px !important ; } } @media (max-width: 991px) and (min-width: 768px) { [data-element-id="elm_dw7QP2fT0mRoHP0Iy6vwFA"] .zpimage-container figure img { width:1064px ; height:616px ; } } @media (max-width: 767px) { [data-element-id="elm_dw7QP2fT0mRoHP0Iy6vwFA"] .zpimage-container figure img { width:1064px ; height:616px ; } } [data-element-id="elm_dw7QP2fT0mRoHP0Iy6vwFA"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="left" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-left zpimage-size-original zpimage-tablet-fallback-original zpimage-mobile-fallback-original hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/PointFire-blog-SharePoint-multilingual-proofing-3.png" width="1064" height="616" loading="lazy" size="original" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_03UjbvshxZhJTZQM_bIifA" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_03UjbvshxZhJTZQM_bIifA"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div style="color:inherit;"><div style="color:inherit;"><p><span style="font-size:16px;"><br></span></p><p><span style="font-size:16px;">In this case I have configured Chrome for three versions of English, one version of French, and one version of German, so three languages altogether excluding the variants.&nbsp; I also turned off the spell checking.</span></p><p><span style="font-size:16px;"><br></span></p><p><span style="font-size:16px;">Next, I turned off the Microsoft Editor browser add-in, whose settings would supersede the simpler version of Microsoft Editor that is built into SharePoint. Lastly, I turned the Editor feature back on, which I had turned off when that setting had become available, by pressing on “Page details” and turning on the “Use Editor” setting.</span></p><p><span style="font-size:16px;"><br></span></p></div></div></div>
</div><div data-element-id="elm_AgNvG7G9vO85hgLuga0EnQ" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_AgNvG7G9vO85hgLuga0EnQ"] .zpimage-container figure img { width: 1048px !important ; height: 478px !important ; } } @media (max-width: 991px) and (min-width: 768px) { [data-element-id="elm_AgNvG7G9vO85hgLuga0EnQ"] .zpimage-container figure img { width:1048px ; height:478px ; } } @media (max-width: 767px) { [data-element-id="elm_AgNvG7G9vO85hgLuga0EnQ"] .zpimage-container figure img { width:1048px ; height:478px ; } } [data-element-id="elm_AgNvG7G9vO85hgLuga0EnQ"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="left" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-left zpimage-size-original zpimage-tablet-fallback-original zpimage-mobile-fallback-original hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/PointFire-blog-SharePoint-multilingual-proofing-4.png" width="1048" height="478" loading="lazy" size="original" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_XzqO6lPFBi6D4oZVRw2zrg" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_XzqO6lPFBi6D4oZVRw2zrg"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div style="color:inherit;"><div style="color:inherit;"><p><span style="font-size:16px;"><br></span></p><p><span style="font-size:16px;">Now it finds typos in English, French and German, but not in Portuguese.</span></p><p><span style="font-size:16px;">Next, I added some Spanish text and then changed my Office 365 <u>profile</u> language to Spanish but not my Microsoft 365 <u>account</u> language.&nbsp;&nbsp;</span></p><p><span style="font-size:16px;"><br></span></p><p><span style="font-size:16px;">It then happily spell-checked the Spanish text.</span></p><p><span style="font-size:16px;"><br></span></p></div></div></div>
</div><div data-element-id="elm_FAy-LdQl5Aecy3sfgtylJQ" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_FAy-LdQl5Aecy3sfgtylJQ"] .zpimage-container figure img { width: 560px !important ; height: 404px !important ; } } @media (max-width: 991px) and (min-width: 768px) { [data-element-id="elm_FAy-LdQl5Aecy3sfgtylJQ"] .zpimage-container figure img { width:560px ; height:404px ; } } @media (max-width: 767px) { [data-element-id="elm_FAy-LdQl5Aecy3sfgtylJQ"] .zpimage-container figure img { width:560px ; height:404px ; } } [data-element-id="elm_FAy-LdQl5Aecy3sfgtylJQ"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="left" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-left zpimage-size-original zpimage-tablet-fallback-original zpimage-mobile-fallback-original hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/PointFire-blog-SharePoint-multilingual-proofing-5.png" width="560" height="404" loading="lazy" size="original" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_3VtgyQrm5dA3B1BVwHRFpQ" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_3VtgyQrm5dA3B1BVwHRFpQ"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div style="color:inherit;"><p><span style="font-size:16px;"><br></span></p><p><span style="font-size:16px;">Maybe the combination of Spanish and Portuguese isn’t the greatest example given that some words appear in both languages, but the perfectly correct Portuguese word “revisão” is not recognized.&nbsp; When we click on the word to find spelling suggestions, it suggests words in English, Spanish, French, and German, notice the two-letter language codes, but not in Portuguese.</span></p><p><span style="font-size:16px;"><br></span></p></div></div>
</div><div data-element-id="elm_HqWmh8sDlneu4uzVUMPM2w" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_HqWmh8sDlneu4uzVUMPM2w"] .zpimage-container figure img { width: 322px !important ; height: 448px !important ; } } @media (max-width: 991px) and (min-width: 768px) { [data-element-id="elm_HqWmh8sDlneu4uzVUMPM2w"] .zpimage-container figure img { width:322px ; height:448px ; } } @media (max-width: 767px) { [data-element-id="elm_HqWmh8sDlneu4uzVUMPM2w"] .zpimage-container figure img { width:322px ; height:448px ; } } [data-element-id="elm_HqWmh8sDlneu4uzVUMPM2w"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="left" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-left zpimage-size-original zpimage-tablet-fallback-original zpimage-mobile-fallback-original hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/PointFire-blog-SharePoint-multilingual-proofing-6.png" width="322" height="448" loading="lazy" size="original" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_bml4_MkDRGOrISwvtOs82A" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_bml4_MkDRGOrISwvtOs82A"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div style="color:inherit;"><div style="color:inherit;"><p><span style="font-size:16px;">One thing that is interesting about this is that, based on the announcement, on similarities with the Microsoft Editor browser extension, and on sneaking a peek at the code, it theoretically should only support up to three languages.&nbsp; In actual fact, it supports as many languages as I tried.&nbsp; I did notice that when you have more than one language, it stops checking for grammar or syntax as well as it does with a single language.</span></p><p><span style="font-size:16px;"><br></span></p><p><span style="font-size:16px;">This is a significant improvement in the editing experience for people with multilingual sites, so if you had turned off the Editor feature, now is the time to turn it back on.</span></p><p><span style="font-size:16px;"><br></span></p><p><span style="font-size:16px;">I hope you found this article helpful. Feel free to leave me your questions in the comments.</span></p></div></div></div>
</div><div data-element-id="elm_3s9lOkkDfmU0L3Y6tyRMuA" data-element-type="divider" class="zpelement zpelem-divider "><style type="text/css"> [data-element-id="elm_3s9lOkkDfmU0L3Y6tyRMuA"].zpelem-divider{ border-radius:1px; } </style><style></style><div class="zpdivider-container zpdivider-line zpdivider-align-center zpdivider-width100 zpdivider-line-style-solid "><div class="zpdivider-common"></div>
</div></div><div data-element-id="elm_07zHL4OqD0xQ2Lx7eZQyGQ" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_07zHL4OqD0xQ2Lx7eZQyGQ"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><p><span style="font-weight:700;">You might also like</span></p><p><span style="font-weight:700;"><br></span></p><p><span style="font-weight:400;"><a href="https://sitebuilder-751082542.zohositescontent.com/blogs/post/localizing-group-by-headers-for-choice-columns-using-json-view-formatting" rel="">Localizing &quot;group by&quot; headers for choice columns using JSON view formatting in SharePoint Online</a></span></p><p><br></p><p><a href="https://sitebuilder-751082542.zohositescontent.com/blogs/post/language-dependent-json-column-formatting-this-time-it-s-the-uilcid-token" title="Language-dependent JSON column formatting, this time it's the IIlcid token" rel="">Language-dependent JSON column formatting, this time it's the IIlcid token</a></p></div>
</div></div></div></div></div></div> ]]></content:encoded><pubDate>Mon, 27 Mar 2023 11:54:56 -0400</pubDate></item><item><title><![CDATA[Localizing "group by" headers for choice columns using JSON view formatting in SharePoint Online]]></title><link>https://blog.icefire.ca/blogs/post/localizing-group-by-headers-for-choice-columns-using-json-view-formatting</link><description><![CDATA[<img align="left" hspace="5" src="https://blog.icefire.ca/SharePoint-group-by-list.png"/>In previous posts, I’ve shown how Choice column values can be localized using a variety of techniques in JSON column formatting, most notably by using the “@UIlcid” token. Can these techniques also be used when doing “group by” these choice columns? Let's find out]]></description><content:encoded><![CDATA[<div class="zpcontent-container blogpost-container "><div data-element-id="elm_8Hi9fVIMRPy3Dbr7T70kFQ" data-element-type="section" class="zpsection "><style type="text/css"></style><div class="zpcontainer-fluid zpcontainer"><div data-element-id="elm_trb5cnV-TK-bwzsxa1zMhQ" data-element-type="row" class="zprow zprow-container zpalign-items- zpjustify-content- " data-equal-column=""><style type="text/css"></style><div data-element-id="elm_cgjCOgfjRdSH7sSKTMofcg" data-element-type="column" class="zpelem-col zpcol-12 zpcol-md-12 zpcol-sm-12 zpalign-self- "><style type="text/css"></style><div data-element-id="elm_N2N7e5Q4QWS0SPMHavxDzQ" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_N2N7e5Q4QWS0SPMHavxDzQ"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-center " data-editor="true"><div style="color:inherit;"><div style="color:inherit;"><p style="text-align:left;"><a href="https://blog.icefire.ca/blogs/post/language-dependent-json-column-formatting-this-time-it-s-the-uilcid-token" title="In previous posts" rel="">I</a><a href="https://blog.icefire.ca/blogs/post/language-dependent-json-column-formatting-this-time-it-s-the-uilcid-token" title="In previous posts" rel="">n previous posts</a>, I’ve shown how Choice column values can be localized using a variety of techniques in JSON column formatting, most notably by using the “@UIlcid” token.</p><p style="text-align:left;"><span style="font-size:16px;"><br></span></p><p style="text-align:left;"><span style="font-size:16px;">Can these techniques also be used when doing “group by” these choice columns?&nbsp; The short answer is no. &nbsp;But fear not, a design decision in SharePoint that normally breaks localization can be used to enable localization.</span></p><p style="text-align:left;"><span style="font-size:16px;"><br></span></p><p style="text-align:left;"><span style="font-size:16px;">Let’s have a look at what happens when we see a list that is “grouped by” a choice column.&nbsp; Here it is in English, grouped by “progress”:</span></p><p style="text-align:left;"><span style="font-size:16px;"><br></span></p></div></div></div>
</div><div data-element-id="elm_xgFvJtzhINNQQGDYZ0HLIQ" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_xgFvJtzhINNQQGDYZ0HLIQ"] .zpimage-container figure img { width: 939px !important ; height: 274px !important ; } } @media (max-width: 991px) and (min-width: 768px) { [data-element-id="elm_xgFvJtzhINNQQGDYZ0HLIQ"] .zpimage-container figure img { width:939px ; height:274px ; } } @media (max-width: 767px) { [data-element-id="elm_xgFvJtzhINNQQGDYZ0HLIQ"] .zpimage-container figure img { width:939px ; height:274px ; } } [data-element-id="elm_xgFvJtzhINNQQGDYZ0HLIQ"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="left" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-left zpimage-size-original zpimage-tablet-fallback-original zpimage-mobile-fallback-original hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/SharePoint-group-by-list-1.png" width="939" height="274" loading="lazy" size="original" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_gB8t60afrizuegagyVWwNw" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_gB8t60afrizuegagyVWwNw"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div style="color:inherit;"><p><br></p><p>We have applied the technique from the <a href="https://blog.icefire.ca/blogs/post/language-dependent-json-column-formatting-this-time-it-s-the-uilcid-token" target="_blank" rel="">Language-dependent JSON column formatting</a> blog post so that the choice column values are localized into French and German.&nbsp; However as we can see below, this does not extend to the “group by” headers, those remain in English.&nbsp; The column value, in blue, is localized, but the same value in the header is not.</p><p><br></p></div></div>
</div><div data-element-id="elm_HTbeLRkTlKbZGCyikmquaQ" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_HTbeLRkTlKbZGCyikmquaQ"] .zpimage-container figure img { width: 930px !important ; height: 274px !important ; } } @media (max-width: 991px) and (min-width: 768px) { [data-element-id="elm_HTbeLRkTlKbZGCyikmquaQ"] .zpimage-container figure img { width:930px ; height:274px ; } } @media (max-width: 767px) { [data-element-id="elm_HTbeLRkTlKbZGCyikmquaQ"] .zpimage-container figure img { width:930px ; height:274px ; } } [data-element-id="elm_HTbeLRkTlKbZGCyikmquaQ"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="left" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-left zpimage-size-original zpimage-tablet-fallback-original zpimage-mobile-fallback-original hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/SharePoint-group-by-list-2.png" width="930" height="274" loading="lazy" size="original" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_v1VTCDF-2BjGCou1WWf4JQ" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_v1VTCDF-2BjGCou1WWf4JQ"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div style="color:inherit;"><p><span style="font-size:16px;"><br></span></p><p><span style="font-size:16px;">The display of values in the columns can be customized by <u>column</u> formatting JSON, but display of values in the group-by headers must be customized by <u>view</u> formatting JSON.&nbsp; Let’s have a look at how we can change that formatting.&nbsp; In the View menu, we can find “Format current view” in the bottom.&nbsp; In this case we are going to format the AllItems (default) list view.</span></p><p><span style="font-size:16px;"><br></span></p></div></div>
</div><div data-element-id="elm_EtrHntJXQjsva6_ZgJxznQ" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_EtrHntJXQjsva6_ZgJxznQ"] .zpimage-container figure img { width: 392px ; height: 500.00px ; } } @media (max-width: 991px) and (min-width: 768px) { [data-element-id="elm_EtrHntJXQjsva6_ZgJxznQ"] .zpimage-container figure img { width:392px ; height:500.00px ; } } @media (max-width: 767px) { [data-element-id="elm_EtrHntJXQjsva6_ZgJxznQ"] .zpimage-container figure img { width:392px ; height:500.00px ; } } [data-element-id="elm_EtrHntJXQjsva6_ZgJxznQ"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="left" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-left zpimage-size-medium zpimage-tablet-fallback-medium zpimage-mobile-fallback-medium hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/SharePoint-all-item-column-list-view.png" width="392" height="500.00" loading="lazy" size="medium" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_WjlFIifaH4mZT_ZZh8H6mg" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_WjlFIifaH4mZT_ZZh8H6mg"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div style="color:inherit;"><p><span style="font-size:16px;">By default it offers the graphical “design mode”.</span></p></div></div>
</div><div data-element-id="elm_rsFaz4wvHvffqKbNFQ0ZHA" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_rsFaz4wvHvffqKbNFQ0ZHA"] .zpimage-container figure img { width: 624px ; height: 760.00px ; } } @media (max-width: 991px) and (min-width: 768px) { [data-element-id="elm_rsFaz4wvHvffqKbNFQ0ZHA"] .zpimage-container figure img { width:500px ; height:608.97px ; } } @media (max-width: 767px) { [data-element-id="elm_rsFaz4wvHvffqKbNFQ0ZHA"] .zpimage-container figure img { width:500px ; height:608.97px ; } } [data-element-id="elm_rsFaz4wvHvffqKbNFQ0ZHA"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="left" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-left zpimage-size-large zpimage-tablet-fallback-large zpimage-mobile-fallback-large hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/SharePoint-List-Format-view.png" width="500" height="608.97" loading="lazy" size="large" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_aHtGg_JUoG80LF7XPUEC-Q" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_aHtGg_JUoG80LF7XPUEC-Q"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div style="color:inherit;"><p><span style="font-size:16px;"><br></span></p><p><span style="font-size:16px;">Let’s select “Advanced mode” to see the JSON.&nbsp; It is initially empty other than the schema declaration, so it uses some default formatting.</span></p><p><span style="font-size:16px;"><br></span></p></div></div>
</div><div data-element-id="elm_4V-igUMwiOJko8r83KxGXQ" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_4V-igUMwiOJko8r83KxGXQ"] .zpimage-container figure img { width: 500px ; height: 610.58px ; } } @media (max-width: 991px) and (min-width: 768px) { [data-element-id="elm_4V-igUMwiOJko8r83KxGXQ"] .zpimage-container figure img { width:500px ; height:610.58px ; } } @media (max-width: 767px) { [data-element-id="elm_4V-igUMwiOJko8r83KxGXQ"] .zpimage-container figure img { width:500px ; height:610.58px ; } } [data-element-id="elm_4V-igUMwiOJko8r83KxGXQ"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="left" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-left zpimage-size-medium zpimage-tablet-fallback-medium zpimage-mobile-fallback-medium hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/SharePoint-list-format-view-2.png" width="500" height="610.58" loading="lazy" size="medium" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_TdEEhbc7o53tz3OCqvDUxA" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_TdEEhbc7o53tz3OCqvDUxA"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div style="color:inherit;"><div style="color:inherit;"><p><span style="font-size:16px;"><br></span></p><p><span style="font-size:16px;">There are relatively few examples or information on what to do next, but we will add a minimalist formatting skeleton.&nbsp; The syntax is described here <a href="https://learn.microsoft.com/en-us/sharepoint/dev/declarative-customization/view-group-formatting">https://learn.microsoft.com/en-us/sharepoint/dev/declarative-customization/view-group-formatting</a></span></p><p><span style="font-size:16px;">The “group by” headers are within “headerFormatter” within “groupProps”.</span></p><p><span style="font-size:16px;"><br></span></p></div></div></div>
</div><div data-element-id="elm_wPIvwZraWJdJCP5ZN-k-hA" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_wPIvwZraWJdJCP5ZN-k-hA"] .zpimage-container figure img { width: 624px !important ; height: 204px !important ; } } @media (max-width: 991px) and (min-width: 768px) { [data-element-id="elm_wPIvwZraWJdJCP5ZN-k-hA"] .zpimage-container figure img { width:624px ; height:204px ; } } @media (max-width: 767px) { [data-element-id="elm_wPIvwZraWJdJCP5ZN-k-hA"] .zpimage-container figure img { width:624px ; height:204px ; } } [data-element-id="elm_wPIvwZraWJdJCP5ZN-k-hA"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="left" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-left zpimage-size-original zpimage-tablet-fallback-original zpimage-mobile-fallback-original hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/SharePoint-list-header-formatter.png" width="624" height="204" loading="lazy" size="original" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_ibmSA-gbwnjsJyi9ckY_1w" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_ibmSA-gbwnjsJyi9ckY_1w"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div style="color:inherit;"><div style="color:inherit;"><p><span style="font-size:16px;"><br></span></p><p><span style="font-size:16px;">The syntax for “headerFormatter” is identical to that of column format, with the important caveat that a lot of it, despite correct syntax, does not work.&nbsp; Yes, there is a “txtContent”, but things like “@currentField” and “[$FieldName]” are not defined and most special strings, most notably &quot;@UIlcid&quot;, are not available.</span></p><p><span style="font-size:16px;"><br></span></p><p><span style="font-size:16px;">That makes determining the language and formatting the value depending on the language difficult, because all of the techniques discussed in previous posts are not available.</span></p><p><span style="font-size:16px;"><br></span></p><p><span style="font-size:16px;">What is available is &quot;@group&quot;, which has three properties,&nbsp; &quot;fieldData&quot;, &quot;columnDisplayName&quot;, and &quot;count&quot;.&nbsp; Normally the use of column display names rather than internal names is a mistake.&nbsp; If you rely on it then things will break badly (like they do for list form JSON formatting) when you change the language, but in this case, that unfortunate design decision can be used to our advantage.</span></p><p><span style="font-size:16px;"><br></span></p><p><span style="font-size:16px;">In this case we have already localized the column names by entering the translations in the MUI (Multilingual User Interface)&nbsp; That means that the “Progress” column has a column display name of “Progress” in English, “Progrès” in French, and “Fortschritt” in German.&nbsp; The value of “@group.columnDisplayName” therefore tells us what is the current UI language, as long as the column header has been localized and its name is different in different languages.</span></p><p><span style="font-size:16px;"><br></span></p><p><span style="font-size:16px;">If we display the value of “@group.columnDisplayName” and of “@group.fieldData” in English we get this:</span></p><p><span style="font-size:16px;"><br></span></p></div></div></div>
</div><div data-element-id="elm_Bfj2YhXZNSw2U-G4islnNQ" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_Bfj2YhXZNSw2U-G4islnNQ"] .zpimage-container figure img { width: 624px !important ; height: 214px !important ; } } @media (max-width: 991px) and (min-width: 768px) { [data-element-id="elm_Bfj2YhXZNSw2U-G4islnNQ"] .zpimage-container figure img { width:624px ; height:214px ; } } @media (max-width: 767px) { [data-element-id="elm_Bfj2YhXZNSw2U-G4islnNQ"] .zpimage-container figure img { width:624px ; height:214px ; } } [data-element-id="elm_Bfj2YhXZNSw2U-G4islnNQ"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="left" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-left zpimage-size-original zpimage-tablet-fallback-original zpimage-mobile-fallback-original hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/SharePoint-List-View-Format-3.png" width="624" height="214" loading="lazy" size="original" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_ED9PeQNDb-pmhox_wCEzVg" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_ED9PeQNDb-pmhox_wCEzVg"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div style="color:inherit;"><p><span style="font-size:16px;"><br></span></p><p><span style="font-size:16px;">We see “Progress=New application” But in French we get “Progrès=New application”</span></p><p><span style="font-size:16px;"><br></span></p></div></div>
</div><div data-element-id="elm_7w2z_fECcm5xtqHpoD3kWA" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_7w2z_fECcm5xtqHpoD3kWA"] .zpimage-container figure img { width: 624px !important ; height: 220px !important ; } } @media (max-width: 991px) and (min-width: 768px) { [data-element-id="elm_7w2z_fECcm5xtqHpoD3kWA"] .zpimage-container figure img { width:624px ; height:220px ; } } @media (max-width: 767px) { [data-element-id="elm_7w2z_fECcm5xtqHpoD3kWA"] .zpimage-container figure img { width:624px ; height:220px ; } } [data-element-id="elm_7w2z_fECcm5xtqHpoD3kWA"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="left" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-left zpimage-size-original zpimage-tablet-fallback-original zpimage-mobile-fallback-original hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/SharePoint-List-View-Format-3-french.png" width="624" height="220" loading="lazy" size="original" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_DupHYuOueDSwXatq9KZQCQ" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_DupHYuOueDSwXatq9KZQCQ"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div style="color:inherit;"><p><span style="font-size:16px;"><br></span></p><p><span style="font-size:16px;">The “columnDisplayName” is localized by the MUI, but the column value is not localized by our column formatting.&nbsp; We can put this all together to take advantage of the display names.&nbsp; In the nested ifs below, we check the value of “@group.columnDisplayName” to determine the current language, then the current value, and then display the appropriate translation of that value.</span></p><p><span style="font-size:16px;"><br></span></p></div></div>
</div><div data-element-id="elm_JTDW_BnYzKN1MhT3o1ltZw" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_JTDW_BnYzKN1MhT3o1ltZw"] .zpimage-container figure img { width: 520px !important ; height: 424px !important ; } } @media (max-width: 991px) and (min-width: 768px) { [data-element-id="elm_JTDW_BnYzKN1MhT3o1ltZw"] .zpimage-container figure img { width:520px ; height:424px ; } } @media (max-width: 767px) { [data-element-id="elm_JTDW_BnYzKN1MhT3o1ltZw"] .zpimage-container figure img { width:520px ; height:424px ; } } [data-element-id="elm_JTDW_BnYzKN1MhT3o1ltZw"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="left" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-left zpimage-size-original zpimage-tablet-fallback-original zpimage-mobile-fallback-original hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/SharePoint-list-groupcolumndisplayname.png" width="520" height="424" loading="lazy" size="original" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_O1jFViZbg1drbickBDRcBw" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_O1jFViZbg1drbickBDRcBw"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div style="color:inherit;"><p><span style="font-size:16px;"><br></span></p><p><span style="font-size:16px;">Here is the result, in French</span></p><p><span style="font-size:16px;"><br></span></p></div></div>
</div><div data-element-id="elm_KxtPeFV7WzUiR4fcmPgRig" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_KxtPeFV7WzUiR4fcmPgRig"] .zpimage-container figure img { width: 624px !important ; height: 180px !important ; } } @media (max-width: 991px) and (min-width: 768px) { [data-element-id="elm_KxtPeFV7WzUiR4fcmPgRig"] .zpimage-container figure img { width:624px ; height:180px ; } } @media (max-width: 767px) { [data-element-id="elm_KxtPeFV7WzUiR4fcmPgRig"] .zpimage-container figure img { width:624px ; height:180px ; } } [data-element-id="elm_KxtPeFV7WzUiR4fcmPgRig"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="left" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-left zpimage-size-original zpimage-tablet-fallback-original zpimage-mobile-fallback-original hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/SharePoint-groupcolumndisplayname-french.png" width="624" height="180" loading="lazy" size="original" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_Zi7jj8fUNxAL4ftOkF7AIw" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_Zi7jj8fUNxAL4ftOkF7AIw"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div style="color:inherit;"><p><span style="font-size:16px;"><br></span></p><p><span style="font-size:16px;">And in German</span></p><p><span style="font-size:16px;"><br></span></p></div></div>
</div><div data-element-id="elm_sSKnDDx3neTPfQGWoE-8Og" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_sSKnDDx3neTPfQGWoE-8Og"] .zpimage-container figure img { width: 624px !important ; height: 182px !important ; } } @media (max-width: 991px) and (min-width: 768px) { [data-element-id="elm_sSKnDDx3neTPfQGWoE-8Og"] .zpimage-container figure img { width:624px ; height:182px ; } } @media (max-width: 767px) { [data-element-id="elm_sSKnDDx3neTPfQGWoE-8Og"] .zpimage-container figure img { width:624px ; height:182px ; } } [data-element-id="elm_sSKnDDx3neTPfQGWoE-8Og"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="left" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-left zpimage-size-original zpimage-tablet-fallback-original zpimage-mobile-fallback-original hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/SharePoint-groupcolumndisplayname-german.png" width="624" height="182" loading="lazy" size="original" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_tZfNHFK3Pn7SA5CQ4otM9g" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_tZfNHFK3Pn7SA5CQ4otM9g"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div style="color:inherit;"><div style="color:inherit;"><div style="color:inherit;"><div style="color:inherit;"><p><br></p><p>What if the user decides to group by Position, a different Choice column, rather than by Progress?&nbsp; There is only one view formatting JSON no matter what you group by, and only one “groupProps” and one “headerFormatter”.&nbsp; Luckily the value of “group.columnDisplayName” detects not only the language but also which column is being grouped by, so you can just extend the nested ifs and localize all the choice columns from the view in a single “txtContent” expression.</p><p><br></p><p>The technique of using of “group.columnDisplayName” works for “@group” within the “group by” header as shown above, but it will also work for “@columnAggregate” in the footer and for the “@aggregates” array elements where applicable, and it also works for Gallery view.</p><p><span style="font-weight:bold;"><br></span></p><p><span style="font-weight:bold;">Was this useful? Leave us your questions in the comments section below!</span></p></div></div></div></div></div>
</div><div data-element-id="elm_K3suObFtGo0asxARDVqCHw" data-element-type="divider" class="zpelement zpelem-divider "><style type="text/css"> [data-element-id="elm_K3suObFtGo0asxARDVqCHw"].zpelem-divider{ border-radius:1px; } </style><style></style><div class="zpdivider-container zpdivider-line zpdivider-align-center zpdivider-width100 zpdivider-line-style-solid "><div class="zpdivider-common"></div>
</div></div><div data-element-id="elm_9byRa4AaPkGjvrrkLJYgGw" data-element-type="heading" class="zpelement zpelem-heading "><style> [data-element-id="elm_9byRa4AaPkGjvrrkLJYgGw"].zpelem-heading { border-radius:1px; } </style><h2
 class="zpheading zpheading-style-none zpheading-align-left " data-editor="true"><span style="font-family:&quot;Work Sans&quot;;font-size:16px;font-weight:700;color:rgb(11, 27, 45);">Related Posts</span><br></h2></div>
<div data-element-id="elm_kgdO1p9uCVzTeuWPSKQOBQ" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_kgdO1p9uCVzTeuWPSKQOBQ"].zpelem-text{ border-radius:1px; padding-block-start:0px; margin-block-start:-1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div><h1><div style="color:inherit;"></div></h1><h1><span style="font-family:&quot;Work Sans&quot;;font-size:16px;"><a href="https://blog.icefire.ca/blogs/post/language-dependent-json-column-formatting-this-time-it-s-the-uilcid-token" title="Language-dependent JSON column formatting: this time it's the @UIlcid token" target="_blank" rel="">Language-dependent JSON column formatting: this time it's the @UIlcid token</a></span></h1><h1><span style="font-size:16px;font-family:&quot;Work Sans&quot;;color:rgb(11, 27, 45);"><a href="https://blog.icefire.ca/blogs/post/language-dependent-json-column-formatting-using-the-lcid-token" title="Language-dependent JSON column formatting using the @lcid token" target="_blank" rel="">Language-dependent JSON column formatting using the @lcid token</a></span></h1><div><div style="color:inherit;"><h1><span style="font-size:16px;font-family:&quot;Work Sans&quot;;"><a href="https://blog.icefire.ca/blogs/post/json-for-different-text-in-different-languages" target="_blank" rel="">JSON for different text in different languages</a></span></h1></div>
</div></div></div></div></div></div></div></div></div> ]]></content:encoded><pubDate>Wed, 08 Mar 2023 11:47:08 -0500</pubDate></item><item><title><![CDATA[Language-dependent JSON column formatting using the @lcid token]]></title><link>https://blog.icefire.ca/blogs/post/language-dependent-json-column-formatting-using-the-lcid-token</link><description><![CDATA[Use JSON column formatting to display different text in different languages in SharePoint using the new @lcid token.]]></description><content:encoded><![CDATA[<div class="zpcontent-container blogpost-container "><div data-element-id="elm_LTnE7VNOSgasOwtENre72w" data-element-type="section" class="zpsection "><style type="text/css"></style><div class="zpcontainer-fluid zpcontainer"><div data-element-id="elm_LffkkLsnTCWTmi-PKYgBMg" data-element-type="row" class="zprow zprow-container zpalign-items- zpjustify-content- " data-equal-column=""><style type="text/css"></style><div data-element-id="elm_UtIjmF5hR2SXnvR9kU_VRw" data-element-type="column" class="zpelem-col zpcol-12 zpcol-md-12 zpcol-sm-12 zpalign-self- "><style type="text/css"></style><div data-element-id="elm_CVjGMNdsS6iePgZdenIIaA" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_CVjGMNdsS6iePgZdenIIaA"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-center " data-editor="true"><div style="color:inherit;"><div style="color:inherit;"><div style="color:inherit;"><p style="text-align:left;">This is an update to my earlier blog post “<a href="https://blog.icefire.ca/blogs/post/json-for-different-text-in-different-languages" target="_blank" rel="">JSON for different text in different languages</a>”, where JSON column formatting is used to display different text in different languages. &nbsp;Please read that post before reading this one.&nbsp;</p><p style="text-align:left;"><span style="font-size:16px;">Since that post was published, a new “@lcid” token has become available.&nbsp; <a href="https://github.com/pnp/List-Formatting/tree/master/column-samples/number-localization" title="There is a sample here" target="_blank" rel="">There is a sample here</a>&nbsp;<span style="color:inherit;">by theChrisKent, and he demonstrates it in a <a href="https://www.youtube.com/watch?v=j6pvLx7qdCE" title="video here" target="_blank" rel="">video here</a></span></span></p><p style="text-align:left;"><span style="font-size:16px;">&nbsp;</span></p><p style="text-align:left;"><span style="font-size:16px;">The technique in the sample and the video sounds better than what I had described in my earlier post, doesn’t it?&nbsp; Except for one very important thing:&nbsp; the @lcid token does not match the user’s current language, or in technical terms the UI Culture.&nbsp; The @lcid token is the current locale of the session, sometimes called the region setting, which is a very different thing.&nbsp; It’s confusing because both the current <i>Language</i> and the current <i>Locale</i> use many of the same locale IDs, but the Language matches the language of user interface elements, while the locale only determines the formatting of dates, numbers, and currency.&nbsp; Locale has 209 possible values, but Language only supports 50 of these.&nbsp; The other 159 are not just other variants of the same language, they can be the same language but in a different jurisdiction with a different currency, the same language with different alphabets or alphabetical order, or other languages altogether.</span></p><p style="text-align:left;font-size:11pt;"><br></p><p style="text-align:left;"><span style="font-size:16px;">The user’s &nbsp;display Language, if it is set and matches one of the site’s alternate languages, always overrides the site’s base language, and the user can set any number of languages, letting an algorithm decide which one will be selected.&nbsp; Users can choose whether to have their Locale preference override the default site locale, and if they do they can only select one locale.&nbsp; The locale is independent of the language. You can set your language to Welsh and your locale to Urdu if you so wish.</span></p><p style="text-align:left;font-size:11pt;"><br></p><p style="text-align:left;"><span style="font-size:16px;">Language is a reliable indicator of the user’s current language on the current site.&nbsp; Locale is not.&nbsp; Using the @lcid token will choose the wrong language more often than not.</span></p><p style="text-align:left;font-size:11pt;"><br></p><p style="text-align:left;"><span style="font-size:16px;">Using the @lcid token only works if the Locale setting correctly reflects the current language.&nbsp; This is where PointFire 365 comes in.&nbsp; One of the lesser-known features of PointFire 365 is that it synchronizes the user’s locale with their language, and uses the user’s locale rather than the site locale.&nbsp; This is mostly so that date, number, and currency formatting will be correct for the user’s current language.&nbsp; Otherwise, you might get calendars with the names for months and days in the wrong language.&nbsp; Because of this PointFire 365 feature, the @lcid token will actually match the page language.</span></p><p style="text-align:left;"><span style="font-size:16px;">&nbsp;</span></p><p style="text-align:left;"><span style="font-size:16px;">So what does the use of the @lcid token in JSON column formatting look like in practice?&nbsp; Here is a new version of the sample code snippet that was used in the earlier post:</span></p></div></div></div></div>
</div><div data-element-id="elm_-0iSC6NZf04LIHl-Ji9S0A" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_-0iSC6NZf04LIHl-Ji9S0A"] .zpimage-container figure img { width: 624px !important ; height: 92px !important ; } } @media (max-width: 991px) and (min-width: 768px) { [data-element-id="elm_-0iSC6NZf04LIHl-Ji9S0A"] .zpimage-container figure img { width:624px ; height:92px ; } } @media (max-width: 767px) { [data-element-id="elm_-0iSC6NZf04LIHl-Ji9S0A"] .zpimage-container figure img { width:624px ; height:92px ; } } [data-element-id="elm_-0iSC6NZf04LIHl-Ji9S0A"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="left" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-left zpimage-size-original zpimage-tablet-fallback-original zpimage-mobile-fallback-original hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/JSON-colon-formatting.png" width="624" height="92" loading="lazy" size="original" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_gBdYWzeKA1vJSzRHkAnPhA" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_gBdYWzeKA1vJSzRHkAnPhA"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div style="color:inherit;"><p><span style="font-size:16px;">Here, rather than checking the value of “Yes”, the JSON code is checking the value of @lcid.&nbsp; The code is just for two values of the field, “New application” and “Active”, but you get the idea.&nbsp; Here is what it looks like in English, French, and German.</span></p></div></div>
</div><div data-element-id="elm_C6RXMFdfPOpZZ8P6cHQkGQ" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_C6RXMFdfPOpZZ8P6cHQkGQ"] .zpimage-container figure img { width: 624px !important ; height: 176px !important ; } } @media (max-width: 991px) and (min-width: 768px) { [data-element-id="elm_C6RXMFdfPOpZZ8P6cHQkGQ"] .zpimage-container figure img { width:624px ; height:176px ; } } @media (max-width: 767px) { [data-element-id="elm_C6RXMFdfPOpZZ8P6cHQkGQ"] .zpimage-container figure img { width:624px ; height:176px ; } } [data-element-id="elm_C6RXMFdfPOpZZ8P6cHQkGQ"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="left" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-left zpimage-size-original zpimage-tablet-fallback-original zpimage-mobile-fallback-original hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-box zpimage-space-none " src="/JSON-formatting-translation-english.png" width="624" height="176" loading="lazy" size="original" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_IJuJCS-RufGWScxWmRU_Bw" data-element-type="spacer" class="zpelement zpelem-spacer "><style> div[data-element-id="elm_IJuJCS-RufGWScxWmRU_Bw"] div.zpspacer { height:30px; } @media (max-width: 768px) { div[data-element-id="elm_IJuJCS-RufGWScxWmRU_Bw"] div.zpspacer { height:calc(30px / 3); } } </style><div class="zpspacer " data-height="30"></div>
</div><div data-element-id="elm_3zKrLNAltVWagG0fJ_DovA" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_3zKrLNAltVWagG0fJ_DovA"] .zpimage-container figure img { width: 624px !important ; height: 166px !important ; } } @media (max-width: 991px) and (min-width: 768px) { [data-element-id="elm_3zKrLNAltVWagG0fJ_DovA"] .zpimage-container figure img { width:624px ; height:166px ; } } @media (max-width: 767px) { [data-element-id="elm_3zKrLNAltVWagG0fJ_DovA"] .zpimage-container figure img { width:624px ; height:166px ; } } [data-element-id="elm_3zKrLNAltVWagG0fJ_DovA"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="left" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-left zpimage-size-original zpimage-tablet-fallback-original zpimage-mobile-fallback-original hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-box zpimage-space-none " src="/JSON-formatting-translation-french.png" width="624" height="166" loading="lazy" size="original" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_asKxTKs0GYVi652Jw-a1zQ" data-element-type="spacer" class="zpelement zpelem-spacer "><style> div[data-element-id="elm_asKxTKs0GYVi652Jw-a1zQ"] div.zpspacer { height:30px; } @media (max-width: 768px) { div[data-element-id="elm_asKxTKs0GYVi652Jw-a1zQ"] div.zpspacer { height:calc(30px / 3); } } </style><div class="zpspacer " data-height="30"></div>
</div><div data-element-id="elm_4_rbl943cm3zFtQeLKhThg" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_4_rbl943cm3zFtQeLKhThg"] .zpimage-container figure img { width: 624px !important ; height: 178px !important ; } } @media (max-width: 991px) and (min-width: 768px) { [data-element-id="elm_4_rbl943cm3zFtQeLKhThg"] .zpimage-container figure img { width:624px ; height:178px ; } } @media (max-width: 767px) { [data-element-id="elm_4_rbl943cm3zFtQeLKhThg"] .zpimage-container figure img { width:624px ; height:178px ; } } [data-element-id="elm_4_rbl943cm3zFtQeLKhThg"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="left" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-left zpimage-size-original zpimage-tablet-fallback-original zpimage-mobile-fallback-original hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-box zpimage-space-none " src="/JSON-formatting-translation-german.png" width="624" height="178" loading="lazy" size="original" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_pMGxMmGiSLaR9vXJ5zN_hQ" data-element-type="spacer" class="zpelement zpelem-spacer "><style> div[data-element-id="elm_pMGxMmGiSLaR9vXJ5zN_hQ"] div.zpspacer { height:30px; } @media (max-width: 768px) { div[data-element-id="elm_pMGxMmGiSLaR9vXJ5zN_hQ"] div.zpspacer { height:calc(30px / 3); } } </style><div class="zpspacer " data-height="30"></div>
</div><div data-element-id="elm_VonfmjGQEypCeyzhe_PnRg" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_VonfmjGQEypCeyzhe_PnRg"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div style="color:inherit;"><div style="color:inherit;"><p><span style="font-size:16px;">The benefits of using this technique rather than the one in the earlier post are</span></p><ol><li><span style="color:inherit;">It is slightly shorter than before</span><br></li><li>It does not require an additional Yes/No column in the view</li><li>It can support all 50 SharePoint languages</li></ol><p><span style="font-size:16px;"><br></span></p><p><span style="font-size:16px;">The disadvantage (for some)</span></p><ul><li>It will usually not work without PointFire 365</li></ul><p><span style="font-size:16px;"><br></span></p><p>If you do not have PointFire 365, then the technique in the <a href="https://blog.icefire.ca/blogs/post/json-for-different-text-in-different-languages" title="earlier post" target="_blank" rel="">earlier post</a> is better.</p></div></div></div>
</div><div data-element-id="elm_j4T6mwQUKp8dA-rqBlj33g" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_j4T6mwQUKp8dA-rqBlj33g"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><h1 style="line-height:1;"><span style="font-family:&quot;Work Sans&quot;;font-size:16px;font-weight:700;color:rgb(0, 0, 0);">Related Posts</span></h1><h1><div style="color:inherit;"></div></h1><h1><span style="font-family:&quot;Work Sans&quot;;font-size:16px;"><a href="https://blog.icefire.ca/blogs/post/localizing-group-by-headers-for-choice-columns-using-json-view-formatting" target="_blank" rel="">Localizing &quot;group by&quot; headers for choice columns using JSON view formatting in SharePoint Online</a></span></h1><h1><a href="https://blog.icefire.ca/blogs/post/language-dependent-json-column-formatting-using-the-lcid-token" target="_blank" rel="" style="font-family:&quot;Work Sans&quot;;font-size:16px;">Language-dependent JSON column formatting using the @lcid token</a><br></h1><h1 style="color:inherit;line-height:1;"><div style="color:inherit;"><div><div></div></div></div></h1><h1><span style="font-size:16px;font-family:&quot;Work Sans&quot;;"><a href="https://blog.icefire.ca/blogs/post/json-for-different-text-in-different-languages" target="_blank" rel="">JSON for different text in different languages</a></span></h1></div>
</div></div></div></div></div></div> ]]></content:encoded><pubDate>Tue, 05 Jul 2022 11:34:48 -0400</pubDate></item><item><title><![CDATA[SharePoint supports 50 languages but PointFire lets you translate to 111 language, here's how.]]></title><link>https://blog.icefire.ca/blogs/post/translate-sharepoint-to-111-languages</link><description><![CDATA[Did you know you can translate SharePoint to 111 languages, even if Microsoft only supports 50. Here's how and the full list of languages.]]></description><content:encoded><![CDATA[<div class="zpcontent-container blogpost-container "><div data-element-id="elm_Zmfc38BbQPWuhqZ2Xjp_0w" data-element-type="section" class="zpsection "><style type="text/css"></style><div class="zpcontainer-fluid zpcontainer"><div data-element-id="elm_hzrC-rJqSGa8mzf-t-9pKg" data-element-type="row" class="zprow zprow-container zpalign-items- zpjustify-content- " data-equal-column=""><style type="text/css"></style><div data-element-id="elm_D4ikaaCrTb-qtssJGC7hDg" data-element-type="column" class="zpelem-col zpcol-12 zpcol-md-12 zpcol-sm-12 zpalign-self- "><style type="text/css"> [data-element-id="elm_D4ikaaCrTb-qtssJGC7hDg"].zpelem-col{ border-radius:1px; } </style><div data-element-id="elm_KcK8QAhVRS2o20zcgbluMw" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_KcK8QAhVRS2o20zcgbluMw"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-center " data-editor="true"><p style="text-align:left;">SharePoint currently <a href="https://support.microsoft.com/en-us/office/languages-supported-by-sharepoint-dfbf3652-2902-4809-be21-9080b6512fff" title="supports 50 languages" rel="">supports 50 languages</a>. Microsoft used to say it <a href="https://blog.icefire.ca/blogs/post/modern-sites-will-let-you-choose-site-language-why-it-s-not-a-big-deal1" title="supported 51 languages" rel="">supported 51 languages</a>, but two of the versions of Serbian (Latin) were the same, and in 2020 they updated their <a href="https://blog.icefire.ca/blogs/post/Serbian-language-codes" title="language codes for Serbian" rel="">language codes for Serbian</a> to a more current standard, bringing the count down to 50.</p><p style="text-align:left;"><span style="color:inherit;"><br></span></p><p style="text-align:left;"><span style="color:inherit;">Until recently we used to say that the <a href="https://try.pointfire.com/" title="PointFire Translator" target="_blank" rel="">PointFire Translator</a> supports all 50 SharePoint languages except for a few and that really bugged us. No longer!&nbsp; With the addition of support for Basque and Galician, there is no longer any &quot;except&quot;.&nbsp;</span><span style="color:inherit;">PointFire Translator now supports all 50 languages that&nbsp;SharePoint&nbsp;recognizes, plus over 60 more languages, everything from Afrikaans to Zulu.</span></p><p style="text-align:left;"><span style="color:inherit;"><br></span></p><p style="text-align:left;">Did you know that Spanish is not the only <a href="https://en.wikipedia.org/wiki/Official_languages_of_Spain" title="official language of Spain" rel="">official language of Spain</a>?&nbsp; There are four major languages that are co-official languages plus some variants of them.&nbsp; Spanish, or more specifically Castilian, is the most common one, spoken throughout the country.&nbsp; In the middle ages Castilian was spoken mainly in the small northern Kingdom of Castile, but as the kingdom grew and merged with its neighbors, Castilian gradually replaced most of the other Latin-based languages in Spain, to the point that it became known as &quot;Spanish&quot;.&nbsp; In South America, the language was introduced long before the time that the language changed its name to &quot;Español&quot;, so in many South American countries it is still called &quot;Castellano&quot;.<br><br></p><p style="text-align:left;">The other major languages of Spain are Catalan, Galician, and Basque.&nbsp; Of these, Catalan and Galician are also Latin-based languages.&nbsp; Catalan translation has been available for many years.&nbsp; There is a high demand for it.&nbsp; But as the teams at Microsoft Research and Azure Cognitive Services brought out new languages every few months,&nbsp;<span style="color:inherit;">Galician, and Basque were late to arrive.&nbsp; Galician was because there are not a lot of corpora of translated documents available, and those are translated to and from Spanish not English, so it had to wait for technology to catch up.&nbsp; Basque does have quite a lot of translated documents, in Spanish and in French and others, since it is an official language of Basque Country, the larger part of which is in Spain, with the northern part in France.&nbsp; The problem with Basque is that it is a language isolate, meaning it is not related to any other language.&nbsp; It is not part of the larger Indo-European language family, nor any other language family.&nbsp; It is the only language isolate spoken in Europe.&nbsp; That makes it difficult to translate, when it has little in common with any other language.</span><br><br></p><p style="text-align:left;">In mid April 2022, the long wait was over.&nbsp; PointFire already had the language codes ready to go, so as soon as Azure Cognitive Services rolled out the new version, PointFire Translator started using it.&nbsp; So now there is no longer any language that PointFire 365 will support but only if you translate it manually, every SharePoint language can now be translated with PointFire Translator.</p><p style="text-align:left;"><span style="color:inherit;"><br></span></p><p style="text-align:left;"><span style="color:inherit;">In case you're a language nerd like us, here's the full list, with SharePoint languages <span style="background-color:rgb(45, 180, 180);">highlighted in teal</span>:</span></p><div><ol><ol><li style="color:inherit;text-align:left;">Afrikaans</li><li style="color:inherit;text-align:left;">Albanian</li><li style="color:inherit;text-align:left;">Amharic</li><li style="text-align:left;"><span style="color:rgb(0, 0, 0);background-color:rgb(45, 180, 180);">Arabic</span></li><li style="color:inherit;text-align:left;">Armenian</li><li style="color:inherit;text-align:left;">Assamese</li><li style="color:inherit;text-align:left;"><span style="background-color:rgb(45, 180, 180);">Azerbaijani</span></li><li style="color:inherit;text-align:left;">Bangla</li><li style="color:inherit;text-align:left;">Bashkir</li><li style="color:inherit;text-align:left;"><span style="background-color:rgb(45, 180, 180);">Basque</span></li><li style="color:inherit;text-align:left;"><span style="background-color:rgb(45, 180, 180);">Bosnian</span></li><li style="color:inherit;text-align:left;"><span style="background-color:rgb(45, 180, 180);">Bulgarian</span></li><li style="color:inherit;text-align:left;">Cantonese (Traditional)</li><li style="color:inherit;text-align:left;"><span style="background-color:rgb(45, 180, 180);">Catalan</span></li><li style="color:inherit;text-align:left;">Chinese (Literary)</li><li style="color:inherit;text-align:left;"><span style="background-color:rgb(45, 180, 180);">Chinese Simplified</span></li><li style="color:inherit;text-align:left;"><span style="background-color:rgb(45, 180, 180);">Chinese Traditional</span></li><li style="color:inherit;text-align:left;"><span style="background-color:rgb(45, 180, 180);">Croatian</span></li><li style="color:inherit;text-align:left;"><span style="background-color:rgb(45, 180, 180);">Czech</span></li><li style="color:inherit;text-align:left;"><span style="background-color:rgb(45, 180, 180);">Danish</span></li><li style="color:inherit;text-align:left;"><span style="background-color:rgb(45, 180, 180);">Dari</span></li><li style="color:inherit;text-align:left;">Divehi</li><li style="color:inherit;text-align:left;"><span style="background-color:rgb(45, 180, 180);">Dutch</span></li><li style="color:inherit;text-align:left;"><span style="background-color:rgb(45, 180, 180);">English</span></li><li style="color:inherit;text-align:left;"><span style="background-color:rgb(45, 180, 180);">Estonian</span></li><li style="color:inherit;text-align:left;">Faroese</li><li style="color:inherit;text-align:left;">Fijian</li><li style="color:inherit;text-align:left;">Filipino</li><li style="color:inherit;text-align:left;"><span style="background-color:rgb(45, 180, 180);">Finnish</span></li><li style="color:inherit;text-align:left;"><span style="background-color:rgb(45, 180, 180);">French</span></li><li style="color:inherit;text-align:left;">French (Canada)</li><li style="color:inherit;text-align:left;"><span style="background-color:rgb(45, 180, 180);">Galician</span></li><li style="color:inherit;text-align:left;">Georgian</li><li style="color:inherit;text-align:left;"><span style="background-color:rgb(45, 180, 180);">German</span></li><li style="color:inherit;text-align:left;"><span style="background-color:rgb(45, 180, 180);">Greek</span></li><li style="color:inherit;text-align:left;">Gujarati</li><li style="color:inherit;text-align:left;">Haitian Creole</li><li style="color:inherit;text-align:left;"><span style="background-color:rgb(45, 180, 180);">Hebrew</span></li><li style="color:inherit;text-align:left;"><span style="background-color:rgb(45, 180, 180);">Hindi</span></li><li style="color:inherit;text-align:left;">Hmong Daw</li><li style="color:inherit;text-align:left;"><span style="background-color:rgb(45, 180, 180);">Hungarian</span></li><li style="color:inherit;text-align:left;">Icelandic</li><li style="color:inherit;text-align:left;"><span style="background-color:rgb(45, 180, 180);">Indonesian</span></li><li style="color:inherit;text-align:left;">Inuinnaqtun</li><li style="color:inherit;text-align:left;">Inuktitut</li><li style="color:inherit;text-align:left;">Inuktitut (Latin)</li><li style="color:inherit;text-align:left;"><span style="background-color:rgb(45, 180, 180);">Irish</span></li><li style="color:inherit;text-align:left;"><span style="background-color:rgb(45, 180, 180);">Italian</span></li><li style="color:inherit;text-align:left;"><span style="background-color:rgb(45, 180, 180);">Japanese</span></li><li style="color:inherit;text-align:left;">Kannada</li><li style="color:inherit;text-align:left;"><span style="background-color:rgb(45, 180, 180);">Kazakh</span></li><li style="color:inherit;text-align:left;">Khmer</li><li style="color:inherit;text-align:left;">Klingon</li><li style="color:inherit;text-align:left;">Klingon (plqaD)</li><li style="color:inherit;text-align:left;"><span style="background-color:rgb(45, 180, 180);">Korean</span></li><li style="color:inherit;text-align:left;">Kurdish (Central)</li><li style="color:inherit;text-align:left;">Kurdish (Northern)</li><li style="color:inherit;text-align:left;">Kyrgyz</li><li style="color:inherit;text-align:left;">Lao</li><li style="color:inherit;text-align:left;"><span style="background-color:rgb(45, 180, 180);">Latvian</span></li><li style="color:inherit;text-align:left;"><span style="background-color:rgb(45, 180, 180);">Lithuanian</span></li><li style="color:inherit;text-align:left;"><span style="background-color:rgb(45, 180, 180);">Macedonian</span></li><li style="color:inherit;text-align:left;">Malagasy</li><li style="color:inherit;text-align:left;"><span style="background-color:rgb(45, 180, 180);">Malay</span></li><li style="color:inherit;text-align:left;">Malayalam</li><li style="color:inherit;text-align:left;">Maltese</li><li style="color:inherit;text-align:left;">Māori</li><li style="color:inherit;text-align:left;">Marathi</li><li style="color:inherit;text-align:left;">Mongolian (Cyrillic)</li><li style="color:inherit;text-align:left;">Mongolian (Traditional)</li><li style="color:inherit;text-align:left;">Myanmar</li><li style="color:inherit;text-align:left;">Nepali</li><li style="color:inherit;text-align:left;"><span style="background-color:rgb(45, 180, 180);">Norwegian (Bokmål)</span></li><li style="color:inherit;text-align:left;">Odia</li><li style="color:inherit;text-align:left;">Pashto</li><li style="color:inherit;text-align:left;">Persian</li><li style="color:inherit;text-align:left;"><span style="background-color:rgb(45, 180, 180);">Polish</span></li><li style="color:inherit;text-align:left;"><span style="background-color:rgb(45, 180, 180);">Portuguese (Brazil)</span></li><li style="color:inherit;text-align:left;"><span style="background-color:rgb(45, 180, 180);">Portuguese (Portugal)</span></li><li style="color:inherit;text-align:left;">Punjabi</li><li style="color:inherit;text-align:left;">Queretaro Otomi</li><li style="color:inherit;text-align:left;"><span style="background-color:rgb(45, 180, 180);">Romanian</span></li><li style="color:inherit;text-align:left;"><span style="background-color:rgb(45, 180, 180);">Russian</span></li><li style="color:inherit;text-align:left;">Samoan</li><li style="color:inherit;text-align:left;"><span style="background-color:rgb(45, 180, 180);">Serbian (Cyrillic)</span></li><li style="color:inherit;text-align:left;"><span style="background-color:rgb(45, 180, 180);">Serbian (Latin)</span></li><li style="color:inherit;text-align:left;"><span style="background-color:rgb(45, 180, 180);">Slovak</span></li><li style="color:inherit;text-align:left;"><span style="background-color:rgb(45, 180, 180);">Slovenian</span></li><li style="color:inherit;text-align:left;">Somali</li><li style="color:inherit;text-align:left;"><span style="background-color:rgb(45, 180, 180);">Spanish</span></li><li style="color:inherit;text-align:left;">Swahili</li><li style="color:inherit;text-align:left;"><span style="background-color:rgb(45, 180, 180);">Swedish</span></li><li style="color:inherit;text-align:left;">Tahitian</li><li style="color:inherit;text-align:left;">Tamil</li><li style="color:inherit;text-align:left;">Tatar</li><li style="color:inherit;text-align:left;">Telugu</li><li style="color:inherit;text-align:left;"><span style="background-color:rgb(45, 180, 180);">Thai</span></li><li style="color:inherit;text-align:left;">Tibetan</li><li style="color:inherit;text-align:left;">Tigrinya</li><li style="color:inherit;text-align:left;">Tongan</li><li style="color:inherit;text-align:left;"><span style="background-color:rgb(45, 180, 180);">Turkish</span></li><li style="color:inherit;text-align:left;">Turkmen</li><li style="color:inherit;text-align:left;"><span style="background-color:rgb(45, 180, 180);">Ukrainian</span></li><li style="color:inherit;text-align:left;">Upper Sorbian</li><li style="color:inherit;text-align:left;">Urdu</li><li style="color:inherit;text-align:left;">Uyghur</li><li style="color:inherit;text-align:left;">Uzbek (Latin)</li><li style="color:inherit;text-align:left;"><span style="background-color:rgb(45, 180, 180);">Vietnamese</span></li><li style="color:inherit;text-align:left;"><span style="background-color:rgb(45, 180, 180);">Welsh</span></li><li style="color:inherit;text-align:left;">Yucatec Maya</li><li style="color:inherit;text-align:left;">Zulu</li></ol></ol></div></div>
</div><div data-element-id="elm_BvLCiwE8EiVEJNSxnRQ8Lg" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_BvLCiwE8EiVEJNSxnRQ8Lg"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><p><span style="color:rgb(0, 0, 0);">If you have more questions, need advice or want to see a live demo, feel free to <a href="mailto:sales@icefire.ca?subject=PointFire%20Translator" title="reach out to us" rel="">reach out to us</a>!</span></p></div>
</div></div></div></div></div></div> ]]></content:encoded><pubDate>Mon, 16 May 2022 19:22:04 -0400</pubDate></item><item><title><![CDATA[Microsoft Editor for SharePoint and how to overcome its language issues]]></title><link>https://blog.icefire.ca/blogs/post/sharepoint-microsoft-editor-how-to-overcome-language-issues</link><description><![CDATA[<img align="left" hspace="5" src="https://blog.icefire.ca/SharePoint-Spell-Check-Original.png"/>Learn how to fix several issues with the Microsoft Editor for SharePoint]]></description><content:encoded><![CDATA[<div class="zpcontent-container blogpost-container "><div data-element-id="elm_VPoDB7FzTiOIk-KwkmmB9w" data-element-type="section" class="zpsection "><style type="text/css"></style><div class="zpcontainer-fluid zpcontainer"><div data-element-id="elm_l3oVvcSYTn2XbIk_2DqW7w" data-element-type="row" class="zprow zprow-container zpalign-items- zpjustify-content- " data-equal-column=""><style type="text/css"></style><div data-element-id="elm_RySWiXk9Q6OEcuC5g1FxrA" data-element-type="column" class="zpelem-col zpcol-12 zpcol-md-12 zpcol-sm-12 zpalign-self- "><style type="text/css"> [data-element-id="elm_RySWiXk9Q6OEcuC5g1FxrA"].zpelem-col{ border-radius:1px; } </style><div data-element-id="elm_gr4ihEXURvqSH7gYEgSdTA" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_gr4ihEXURvqSH7gYEgSdTA"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-center " data-editor="true"><div style="color:inherit;"><p style="text-align:left;"><span style="font-size:16px;">In late December 2021, SharePoint introduced a spell check feature when editing modern pages.&nbsp; This change did not spend very long in the roadmap before being released.&nbsp; More details about the roadmap and the feature can be found here</span></p><p style="text-align:left;"><span style="font-size:16px;"></span></p><p style="text-align:left;"><span><a href="https://www.microsoft.com/microsoft-365/roadmap?featureid=88534" rel="">https://www.microsoft.com/microsoft-365/roadmap?featureid=88534</a><br></span></p><p style="text-align:left;"><br></p><div style="color:inherit;"><div style="color:inherit;"><p style="text-align:left;"><span>The new feature is based on the Microsoft Editor service, <a href="https://support.microsoft.com/en-us/office/microsoft-editor-checks-grammar-and-more-in-documents-mail-and-the-web-91ecbe1b-d021-4e9e-a82e-abc4cd7163d7">a browser extension</a> that has already been added to Word and Outlook.</span></p><p style="text-align:left;"><span style="font-size:11pt;color:inherit;text-align:center;"><br></span></p><p style="text-align:left;"><span style="font-size:16px;color:inherit;text-align:center;">When it works correctly, it is very useful and easy to use.&nbsp; However, it is a bit resource-intensive and has serious language issues.&nbsp; Soon after it came out, people started to complain about it and wanting to turn it off, especially people whose SharePoint pages had text in more than one language.&nbsp; There was no way to turn it off nor any easy way to configure it.</span></p><p style="text-align:left;"><span style="font-size:16px;color:inherit;text-align:center;"><br></span></p><p style="text-align:left;"><span style="font-size:16px;color:inherit;text-align:center;">For a small example of its language issues see in the image below, there is text in three languages, English, French, and German.&nbsp; In this case the user interface language is French.&nbsp; The Microsoft Editor spell checker takes issue with the English and the French text, filling it with red squiggly lines, but is just fine with the German text.&nbsp; Why?</span></p><p style="text-align:left;"><span style="font-size:16px;color:inherit;text-align:center;"><br></span></p></div></div></div></div>
</div><div data-element-id="elm_kw1o37bF0o4Bm4yN5ojF7A" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_kw1o37bF0o4Bm4yN5ojF7A"] .zpimage-container figure img { width: 624px !important ; height: 356px !important ; } } @media (max-width: 991px) and (min-width: 768px) { [data-element-id="elm_kw1o37bF0o4Bm4yN5ojF7A"] .zpimage-container figure img { width:624px ; height:356px ; } } @media (max-width: 767px) { [data-element-id="elm_kw1o37bF0o4Bm4yN5ojF7A"] .zpimage-container figure img { width:624px ; height:356px ; } } [data-element-id="elm_kw1o37bF0o4Bm4yN5ojF7A"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="left" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-left zpimage-size-original zpimage-tablet-fallback-original zpimage-mobile-fallback-original hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/SharePoint-spell-check.png" width="624" height="356" loading="lazy" size="original" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_a5C5sDPCHTqWaAloj7H2Kg" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_a5C5sDPCHTqWaAloj7H2Kg"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div style="color:inherit;"><p><span style="font-size:16px;"><br></span></p><p><span style="font-size:16px;">It turns out in this example that the site’s template is German.&nbsp; It doesn’t matter that the text is not in that language, or that the user’s language is not that language, Microsoft Editor treats it all as if it were in German.&nbsp; It does no language detection.&nbsp; For longer text, the screen slowly fills with red squiggly lines under every word while you have to wait.</span></p><p><span style="font-size:16px;"><br></span></p><p><span style="font-size:16px;"></span></p><div style="color:inherit;"><p><span style="font-size:16px;">There is an exception to this: Communication sites with the&nbsp;</span><span style="color:inherit;">Multilingual&nbsp;Publishing feature&nbsp;</span><span style="color:inherit;">turned on.&nbsp; For the source page in the original site language, it accepts that language and rejects others</span></p><p><span style="font-size:16px;"><br></span></p></div></div></div>
</div><div data-element-id="elm_UZjCi7uWntjO7aWLIpojWA" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_UZjCi7uWntjO7aWLIpojWA"] .zpimage-container figure img { width: 500px ; height: 255.47px ; } } @media (max-width: 991px) and (min-width: 768px) { [data-element-id="elm_UZjCi7uWntjO7aWLIpojWA"] .zpimage-container figure img { width:500px ; height:255.47px ; } } @media (max-width: 767px) { [data-element-id="elm_UZjCi7uWntjO7aWLIpojWA"] .zpimage-container figure img { width:500px ; height:255.47px ; } } [data-element-id="elm_UZjCi7uWntjO7aWLIpojWA"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="left" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-left zpimage-size-medium zpimage-tablet-fallback-medium zpimage-mobile-fallback-medium hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/SharePoint-Spell-Check-Original.png" width="500" height="255.47" loading="lazy" size="medium" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm__Gm9C9rkx6glU2QQ-axJBA" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm__Gm9C9rkx6glU2QQ-axJBA"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div style="color:inherit;"><p><span style="font-size:16px;">For the “translated” (copied) pages, it is the other way around</span></p></div></div>
</div><div data-element-id="elm_0hGlL0ip8MMzUDObDbivPw" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_0hGlL0ip8MMzUDObDbivPw"] .zpimage-container figure img { width: 624px !important ; height: 254px !important ; } } @media (max-width: 991px) and (min-width: 768px) { [data-element-id="elm_0hGlL0ip8MMzUDObDbivPw"] .zpimage-container figure img { width:624px ; height:254px ; } } @media (max-width: 767px) { [data-element-id="elm_0hGlL0ip8MMzUDObDbivPw"] .zpimage-container figure img { width:624px ; height:254px ; } } [data-element-id="elm_0hGlL0ip8MMzUDObDbivPw"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="left" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-left zpimage-size-original zpimage-tablet-fallback-original zpimage-mobile-fallback-original hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/SharePoint-Spell-Check-Original-french.png" width="624" height="254" loading="lazy" size="original" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_lgjgjTIzSLwYr2WYiE70Nw" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_lgjgjTIzSLwYr2WYiE70Nw"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div style="color:inherit;"><div style="color:inherit;"><p><span style="font-size:16px;">This does not work every time for me, but it is difficult to reproduce.&nbsp; What about if you’re not using the Multilingual Publishing feature, like for example on a Teams sites where the feature is not available, or if there is a need to have text in more than one language, or to not use the feature?</span></p><p><span style="font-size:16px;"><br></span></p><p><span style="font-size:16px;">Well, there is always the plug-in.&nbsp; The <a href="https://support.microsoft.com/en-us/office/check-grammar-and-spelling-with-the-microsoft-editor-browser-extension-49dd8e1b-3dfa-4ba7-a40e-1bc120f9a71c">Microsoft Editor browser plug-in</a> for Edge and Chrome is a different version of the same Microsoft Editor.&nbsp; Unlike the version in SharePoint, it does support multiple languages.&nbsp; Its configuration is a bit clunky and hard to find, but you can set up to three proofing languages with the plug-in.&nbsp; You must go to a site other than Office 365 that has a multi-line editor and make a spelling error</span></p><p><span style="font-size:16px;"><br></span></p></div></div></div>
</div><div data-element-id="elm_F8eMEjKcmR2MPPUDt53diA" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_F8eMEjKcmR2MPPUDt53diA"] .zpimage-container figure img { width: 392px !important ; height: 464px !important ; } } @media (max-width: 991px) and (min-width: 768px) { [data-element-id="elm_F8eMEjKcmR2MPPUDt53diA"] .zpimage-container figure img { width:392px ; height:464px ; } } @media (max-width: 767px) { [data-element-id="elm_F8eMEjKcmR2MPPUDt53diA"] .zpimage-container figure img { width:392px ; height:464px ; } } [data-element-id="elm_F8eMEjKcmR2MPPUDt53diA"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="left" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-left zpimage-size-original zpimage-tablet-fallback-original zpimage-mobile-fallback-original hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/PointFire-spell-check1.png" width="392" height="464" loading="lazy" size="original" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_pX5Yl346AStCQZUJ94Kp0Q" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_pX5Yl346AStCQZUJ94Kp0Q"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div style="color:inherit;"><p><span style="font-size:16px;"><br></span></p><p><span style="font-size:16px;">While we’re here, notice that it is showing spelling suggestions in both English and French.&nbsp; Now click on the three dots to find the “Editor settings”.&nbsp; The plug-in is highly configurable.</span></p><p><span style="font-size:16px;"><br></span></p></div></div>
</div><div data-element-id="elm_9F4zYBggFa92XFqyCimxgw" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_9F4zYBggFa92XFqyCimxgw"] .zpimage-container figure img { width: 624px !important ; height: 328px !important ; } } @media (max-width: 991px) and (min-width: 768px) { [data-element-id="elm_9F4zYBggFa92XFqyCimxgw"] .zpimage-container figure img { width:624px ; height:328px ; } } @media (max-width: 767px) { [data-element-id="elm_9F4zYBggFa92XFqyCimxgw"] .zpimage-container figure img { width:624px ; height:328px ; } } [data-element-id="elm_9F4zYBggFa92XFqyCimxgw"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="left" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-left zpimage-size-original zpimage-tablet-fallback-original zpimage-mobile-fallback-original hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/Microsoft-editor.png" width="624" height="328" loading="lazy" size="original" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_9DgvTmdV11TMG7fH4HM_nA" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_9DgvTmdV11TMG7fH4HM_nA"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div style="color:inherit;"><p><span style="font-size:16px;"><br></span></p><p><span style="font-size:16px;">If you click on “Manage languages” you can select the languages that you want it to recognize.</span></p><p><span style="font-size:16px;"><br></span></p></div></div>
</div><div data-element-id="elm_mvwy6MlM69S66bJGPr9r0Q" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_mvwy6MlM69S66bJGPr9r0Q"] .zpimage-container figure img { width: 576px !important ; height: 414px !important ; } } @media (max-width: 991px) and (min-width: 768px) { [data-element-id="elm_mvwy6MlM69S66bJGPr9r0Q"] .zpimage-container figure img { width:576px ; height:414px ; } } @media (max-width: 767px) { [data-element-id="elm_mvwy6MlM69S66bJGPr9r0Q"] .zpimage-container figure img { width:576px ; height:414px ; } } [data-element-id="elm_mvwy6MlM69S66bJGPr9r0Q"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="left" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-left zpimage-size-original zpimage-tablet-fallback-original zpimage-mobile-fallback-original hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/Microsoft-editor-proofing-language.png" width="576" height="414" loading="lazy" size="original" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_xPITOH_TgUHX9jYi3bffNA" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_xPITOH_TgUHX9jYi3bffNA"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div style="color:inherit;"><p><span style="font-size:16px;">You can only choose up to three languages and they must be among the languages for which you have configured your browser.&nbsp; When used in conjunction with the SharePoint feature, they must all be one of the top three browser languages.&nbsp; Certain settings are language-specific, for example you can check for formality in French but not in English, and in fact a lot of the rules to check only occur in one language. Does selecting languages in the plug-in work within SharePoint?&nbsp; It did a few weeks ago, but today it while writing this blog post, it’s only partly working.&nbsp; Here is what <u>is</u> working today.</span></p><p><span style="font-size:16px;"><br></span></p></div></div>
</div><div data-element-id="elm_FgWmJ4zrw8zbvH7M98Hdbg" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_FgWmJ4zrw8zbvH7M98Hdbg"] .zpimage-container figure img { width: 480px !important ; height: 482px !important ; } } @media (max-width: 991px) and (min-width: 768px) { [data-element-id="elm_FgWmJ4zrw8zbvH7M98Hdbg"] .zpimage-container figure img { width:480px ; height:482px ; } } @media (max-width: 767px) { [data-element-id="elm_FgWmJ4zrw8zbvH7M98Hdbg"] .zpimage-container figure img { width:480px ; height:482px ; } } [data-element-id="elm_FgWmJ4zrw8zbvH7M98Hdbg"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="left" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-left zpimage-size-original zpimage-tablet-fallback-original zpimage-mobile-fallback-original hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/SharePoint-Editor2.png" width="480" height="482" loading="lazy" size="original" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_1H_nKBMfLsJjjeH6hAh85A" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_1H_nKBMfLsJjjeH6hAh85A"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><p><span style="color:inherit;font-size:16px;"><br></span></p><p><span style="color:inherit;font-size:16px;">I have configured the plug-in to accept French and English.&nbsp; Within SharePoint, the Microsoft Editor now not only accepts both languages, but it also gives me alternative spelling options in English and in French when it doesn’t recognize a word.&nbsp; But look carefully at the screen shot above.&nbsp; Notice the smaller dropdown right behind the Microsoft Editor dropdown?&nbsp; Yeah, there are two instances of the Microsoft Editor dropdown, one with spelling choices just in English and one in front with spelling choices in the configured languages.&nbsp; It’s not quite perfect yet.&nbsp; If you manage to close the front dropdown and not the back one, you see that the hidden dropdown is the original one, with spelling suggestions in English only</span><br></p></div>
</div><div data-element-id="elm_U7xFRclZfcYOHr4UTeuS7Q" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_U7xFRclZfcYOHr4UTeuS7Q"] .zpimage-container figure img { width: 348px !important ; height: 232px !important ; } } @media (max-width: 991px) and (min-width: 768px) { [data-element-id="elm_U7xFRclZfcYOHr4UTeuS7Q"] .zpimage-container figure img { width:348px ; height:232px ; } } @media (max-width: 767px) { [data-element-id="elm_U7xFRclZfcYOHr4UTeuS7Q"] .zpimage-container figure img { width:348px ; height:232px ; } } [data-element-id="elm_U7xFRclZfcYOHr4UTeuS7Q"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="left" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-left zpimage-size-original zpimage-tablet-fallback-original zpimage-mobile-fallback-original hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/Microsoft-editor3.png" width="348" height="232" loading="lazy" size="original" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_T5IRmb_iczUlk8erLM-Ffw" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_T5IRmb_iczUlk8erLM-Ffw"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div style="color:inherit;"><div style="color:inherit;"><p><span style="font-size:16px;"><br></span></p><p><span style="font-size:16px;">Do you think that all your content creators are going to be able to configure their browsers and their browser plug-ins to select a list of possible languages?&nbsp; Maybe not.&nbsp; So what can you do on the server to turn off the feature altogether?&nbsp; Until very recently that was not an option either.</span></p><p><span style="font-size:16px;"><br></span></p><p><span style="font-size:16px;">In late April 2022, a new feature appeared unannounced with <a href="https://support.microsoft.com/en-us/office/add-text-tables-and-images-to-your-page-with-the-text-web-part-729c0aa1-bc0d-41e3-9cde-c60533f2c801">a brief description</a> on the Microsoft site.&nbsp; While editing a page, select Page Details at the top of a page.&nbsp; You may have to publish the page first.&nbsp; In the page details pane, you will see</span></p></div></div></div>
</div><div data-element-id="elm_WZfk65cXgVqjNezFFjF_mQ" data-element-type="image" class="zpelement zpelem-image "><style> @media (min-width: 992px) { [data-element-id="elm_WZfk65cXgVqjNezFFjF_mQ"] .zpimage-container figure img { width: 504px !important ; height: 128px !important ; } } @media (max-width: 991px) and (min-width: 768px) { [data-element-id="elm_WZfk65cXgVqjNezFFjF_mQ"] .zpimage-container figure img { width:504px ; height:128px ; } } @media (max-width: 767px) { [data-element-id="elm_WZfk65cXgVqjNezFFjF_mQ"] .zpimage-container figure img { width:504px ; height:128px ; } } [data-element-id="elm_WZfk65cXgVqjNezFFjF_mQ"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="" data-size-mobile="" data-align="left" data-tablet-image-separate="false" data-mobile-image-separate="false" class="zpimage-container zpimage-align-left zpimage-size-original zpimage-tablet-fallback-original zpimage-mobile-fallback-original hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/SharePoint-editor-spell-check-toggle.png" width="504" height="128" loading="lazy" size="original" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_ZCQShMY1CFh2Wye5pimIjA" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_ZCQShMY1CFh2Wye5pimIjA"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div style="color:inherit;"><div style="color:inherit;"><p><span style="font-size:16px;"><br></span></p><p><span style="font-size:16px;">You can use the slider to toggle the Microsoft Editor on this page.&nbsp; You have to repeat it on each page.&nbsp; There is no simple way to toggle it programmatically because it’s not a regular page property, and no way to set it for an entire site or tenant.</span></p><p><span style="font-size:16px;">Maybe some day the SharePoint version of Microsoft Editor will become as configurable as the other versions or will do proper language detection, but until that happens the two options are to either turn it off on a per-page basis or to install and configure better language detection on a per-workstation basis.</span></p></div></div></div>
</div></div></div></div></div></div> ]]></content:encoded><pubDate>Wed, 04 May 2022 12:36:04 -0400</pubDate></item><item><title><![CDATA[How to Translate SharePoint Online's Content Type Gallery]]></title><link>https://blog.icefire.ca/blogs/post/translate-sharepoint-online-content-type-gallery</link><description><![CDATA[<img align="left" hspace="5" src="https://blog.icefire.ca/create-content-type.png"/>How do you localize content types and site columns in the content type gallery in SharePoint Online?]]></description><content:encoded><![CDATA[<div class="zpcontent-container blogpost-container "><div data-element-id="elm_K8zHiW4ZRISisjZnguknCA" data-element-type="section" class="zpsection "><style type="text/css"></style><div class="zpcontainer-fluid zpcontainer"><div data-element-id="elm_TT6uVtLJSW-ztok4HhcSeA" data-element-type="row" class="zprow zprow-container zpalign-items- zpjustify-content- " data-equal-column=""><style type="text/css"></style><div data-element-id="elm_ZqL7IpQzRjCNqW6MNI9nMg" data-element-type="column" class="zpelem-col zpcol-12 zpcol-md-12 zpcol-sm-12 zpalign-self- "><style type="text/css"></style><div data-element-id="elm_qY4oDorwY3cnDczD-WamEg" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_qY4oDorwY3cnDczD-WamEg"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div>How do you localize content types and site columns in the content type gallery in SharePoint Online? Most content types will inhering their&nbsp; descriptions and column names from these higher-level content types, it's important to get them right in the first place.</div></div>
</div><div data-element-id="elm_yEiQ3uZikuNC3Yg-x1hWng" data-element-type="imagetext" class="zpelement zpelem-imagetext "><style> [data-element-id="elm_yEiQ3uZikuNC3Yg-x1hWng"].zpelem-imagetext{ border-radius:1px; } </style><div data-size-tablet="size-original" data-size-mobile="size-original" data-align="left" data-tablet-image-separate="" data-mobile-image-separate="" class="zpimagetext-container zpimage-with-text-container zpimage-align-left zpimage-size-small zpimage-tablet-fallback-small zpimage-mobile-fallback-small hb-lightbox " data-lightbox-options="
            type:fullscreen,
            theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/content-type-gallery.png" size="small" data-lightbox="true" style="width:283px;"/></picture></span></figure><div class="zpimage-text zpimage-text-align-left " data-editor="true"><div><div><div><div><span style="color:inherit;font-size:16px;">If you go to the SharePoint admin center, for instance by going to &quot;https://(tenantname)-admin.sharepoint.com/&quot; you can expand the Content services menu item to get to the Content type gallery. By the way, see the Term store item there? Term stores are easily translated, but that's for another day.</span><span style="font-size:16px;"><br></span></div><div><span style="color:inherit;"><br></span></div><div><span style="font-size:16px;">To edit the content type gallery in SharePoint, select Content Type gallery.&nbsp;&nbsp;</span></div><div><span style="font-size:16px;"><br></span></div><div><span style="font-size:16px;">You can also get there directly using</span></div><div><span style="font-size:16px;">https://(tenantname)-admin.sharepoint.com/_layouts/15/online/AdminHome.aspx#/contentTypes</span></div><p><br></p><div><span style="font-size:16px;">It's easy to edit and to create content types from there, by clicking on &quot;Create content type&quot;, see image below.</span></div><p><span style="color:inherit;"><span style="font-size:16px;"><br></span></span></p><div><br></div></div></div></div></div>
</div></div><div data-element-id="elm_G92gWvlfcqEAtxhS-kE-Ew" data-element-type="image" class="zpelement zpelem-image "><style> [data-element-id="elm_G92gWvlfcqEAtxhS-kE-Ew"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="size-original" data-size-mobile="size-original" data-align="center" data-tablet-image-separate="" data-mobile-image-separate="" class="zpimage-container zpimage-align-center zpimage-size-original zpimage-tablet-fallback-original zpimage-mobile-fallback-original hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/create-content-type.png" size="original" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_6DgCoUg8cHST-cbFrtNJDA" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_6DgCoUg8cHST-cbFrtNJDA"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div>You are prompted for a name and description in only one language, even though name and description support MUI (Multilingual User Interface). There is no easy way to edit the content type's name and description and the names and descriptions of the columns used in the content type in languages other than your own.<br></div><p><br></p><div>To do that you have to go to the content type hub site, a hidden site, using the fixed URL &quot;https://(tenantname).sharepoint.com/sites/contentTypeHub/&quot;</div><p><br></p><div>All the content types are on this site. To see and edit all the content types, you go here: &quot;https://(tenantname).sharepoint.com/sites/contentTypeHub/_layouts/15/mngctype.aspx&quot;</div><p><br></p><div>You could change your language and then edit the name and the description of every content type, and within each content type you could change the name and description of every site column in that language. For the site columns you could also go to &quot;https://<span style="color:inherit;">(tenantname)</span>.sharepoint.com/sites/contentTypeHub/_layouts/15/mngfield.aspx&quot; to edit the names and descriptions directly. If you have multiple languages, you can do that once for every language.</div><p><span style="color:inherit;"><img src="/Fri%20Jul%2023%202021.png" alt=""></span><span style="color:inherit;"><br></span></p><div><br></div><div><br></div><div><div>If you have a <a href="https://pointfire.com/" title="PointFire 365" rel="">PointFire 365</a> license, a much easier way to do this is to install PointFire 365 on this hidden site, and activate it with all of the languages that you might use on any site in your tenant. Then within the PointFire 365, select &quot;Translate the Interface&quot;. This will find every untranslated name and description of every content type and site column, suggest translations for your review, and apply them to the content type gallery.</div></div><div><br></div><div><span style="color:inherit;"><img src="/Fri%20Jul%2023%202021-1.png" alt=""></span><br></div><div><span style="color:inherit;"><div><br></div><div>It's a good idea to do this early on, before the content types get used on sites, so that the translated versions of content types can be available to every site, rather than having to break inheritance and translate them on each site individually.&nbsp; Isn't it automatically applied to content types when you change it in the content type hub?&nbsp; Isn't that the point of a content type hub?</div><div><br></div><div>Be careful about inheritance of the translation of site columns and content types. SharePoint does not always propagate changes made only to a translation unless some other property of the columns or content type itself has changed. You need to make a change other than translation to the column or content type in order to initiate a re-publishing.</div></span></div><div><span style="color:inherit;"><br></span></div></div>
</div></div></div></div></div></div> ]]></content:encoded><pubDate>Wed, 04 Aug 2021 17:58:46 -0400</pubDate></item><item><title><![CDATA[Simple Trick to Translate the SharePoint Hub Name]]></title><link>https://blog.icefire.ca/blogs/post/simple-trick-to-translate-the-sharepoint-hub-name2</link><description><![CDATA[SharePoint's hub navigation supports localization, that is to say if you change your language then you can see the navigation links in that language.. ]]></description><content:encoded><![CDATA[<div class="zpcontent-container blogpost-container "><div data-element-id="elm_59F1Pd1RTVuS0fH-OXEgQw" data-element-type="section" class="zpsection "><style type="text/css"></style><div class="zpcontainer-fluid zpcontainer"><div data-element-id="elm_3tblVaceRW6d7USVoSCxFw" data-element-type="row" class="zprow zprow-container zpalign-items- zpjustify-content- " data-equal-column=""><style type="text/css"></style><div data-element-id="elm__9v4aWaNRFKfFdRCB_Ohbg" data-element-type="column" class="zpelem-col zpcol-12 zpcol-md-12 zpcol-sm-12 zpalign-self- "><style type="text/css"></style><div data-element-id="elm_dGC5VeHdR7-VcADygECFNw" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_dGC5VeHdR7-VcADygECFNw"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-center " data-editor="true"><div style="text-align:left;font-size:14px;"><div><span style="font-size:16px;">SharePoint's hub navigation supports localization, that is to say if you change your language then you can see the navigation links in that language... eventually.&nbsp; The navigation links are cached so it may take a while for people to see the translated versions.</span></div><div><br></div><p><span style="color:inherit;font-size:16px;"></span></p><div><span style="font-size:16px;">That applies to the text of the links, because they support the MUI (Multilingual User Interface) where the text of the user interface element can be different for different languages, but it does not work for the &quot;Hub name&quot; which appears in the global navigation menu.&nbsp; It is the same in all languages.</span></div></div></div>
</div><div data-element-id="elm_msVJ7vlrvsGW55TVH-etpw" data-element-type="image" class="zpelement zpelem-image "><style> [data-element-id="elm_msVJ7vlrvsGW55TVH-etpw"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="size-original" data-size-mobile="size-original" data-align="left" data-tablet-image-separate="" data-mobile-image-separate="" class="zpimage-container zpimage-align-left zpimage-size-original zpimage-tablet-fallback-original zpimage-mobile-fallback-original hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/HUBNAMEASNAMEFR%20-1-.png" size="original" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_4dXQywVfTkm0VP5Qwb71Ag" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_4dXQywVfTkm0VP5Qwb71Ag"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div style="font-size:14px;"><div><span style="font-size:16px;">As you can see above. the navigation is localized, but the name of the hub, &quot;Global Navigation&quot;, is not.</span></div><div><br></div><p><span style="color:inherit;font-size:16px;"></span></p><div><span style="font-size:16px;">Fortunately, there is a simple workaround for this.&nbsp; The first step is to hide the Hub name.&nbsp; Go to the settings (gear icon) then Hub site settings, and select &quot;Hidden in navigation&quot;</span></div></div></div>
</div><div data-element-id="elm_YlcrNPiLYXLFmM9qy66D3g" data-element-type="image" class="zpelement zpelem-image "><style> [data-element-id="elm_YlcrNPiLYXLFmM9qy66D3g"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="size-original" data-size-mobile="size-original" data-align="left" data-tablet-image-separate="" data-mobile-image-separate="" class="zpimage-container zpimage-align-left zpimage-size-original zpimage-tablet-fallback-original zpimage-mobile-fallback-original hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/EDITHUBNAME%20-1-.bmp" size="original" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_16QhAlL8gFwqj1E29oS4BQ" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_16QhAlL8gFwqj1E29oS4BQ"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div>The hub name will disappear from the navigation bar.&nbsp; Next, we will add it back as a label.&nbsp; Edit the navigation menu and create a new item, and make this item a Label, and give it the same name as the Hub name.&nbsp; For the purpose of demonstration, I used a lower case for the word &quot;navigation&quot; so that I can tell that it is the label and not the original name.</div></div>
</div><div data-element-id="elm_Ggtrbn_RtI00fcr2eftivA" data-element-type="image" class="zpelement zpelem-image "><style> [data-element-id="elm_Ggtrbn_RtI00fcr2eftivA"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="size-original" data-size-mobile="size-original" data-align="left" data-tablet-image-separate="" data-mobile-image-separate="" class="zpimage-container zpimage-align-left zpimage-size-original zpimage-tablet-fallback-original zpimage-mobile-fallback-original hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/EDITLABEL%20-1-.png" size="original" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_nujXwvMdyXxaqqLaQ2l0ow" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_nujXwvMdyXxaqqLaQ2l0ow"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><div style="font-size:14px;"><div><span style="font-size:16px;">Make sure it is the first item in the menu and save.</span></div><div><br></div><p><span style="color:inherit;font-size:16px;"></span></p><div><span style="font-size:16px;">This label&nbsp;<u>does</u>&nbsp;support MUI.&nbsp; You can localize it.&nbsp; I used PointFire 365 to do this, but you can also do it manually.</span></div></div></div>
</div><div data-element-id="elm_IVc8xe3ULpVT10kLTG7ZNw" data-element-type="image" class="zpelement zpelem-image "><style> [data-element-id="elm_IVc8xe3ULpVT10kLTG7ZNw"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="size-original" data-size-mobile="size-original" data-align="left" data-tablet-image-separate="" data-mobile-image-separate="" class="zpimage-container zpimage-align-left zpimage-size-original zpimage-tablet-fallback-original zpimage-mobile-fallback-original hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/HUBNAMEASLABELFR%20-1--1.bmp" size="original" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_oUCtRUMpSWs_3TuKN6mTkg" data-element-type="image" class="zpelement zpelem-image "><style> [data-element-id="elm_oUCtRUMpSWs_3TuKN6mTkg"].zpelem-image { border-radius:1px; } </style><div data-caption-color="" data-size-tablet="size-original" data-size-mobile="size-original" data-align="left" data-tablet-image-separate="" data-mobile-image-separate="" class="zpimage-container zpimage-align-left zpimage-size-original zpimage-tablet-fallback-original zpimage-mobile-fallback-original hb-lightbox " data-lightbox-options="
                type:fullscreen,
                theme:dark"><figure role="none" class="zpimage-data-ref"><span class="zpimage-anchor" role="link" tabindex="0" aria-label="Open Lightbox" style="cursor:pointer;"><picture><img class="zpimage zpimage-style-none zpimage-space-none " src="/HUBNAMEASLABEL-1.png" size="original" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_oGwXgZj3JgMkCIDt-VJoKg" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_oGwXgZj3JgMkCIDt-VJoKg"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><p><span style="color:inherit;font-size:16px;">The end result looks exactly like the hub menu, showing the hub name, except that the Hub name is localized.</span><br></p></div>
</div><div data-element-id="elm_RcJv2FFD2-X9Hbxbh2jU3Q" data-element-type="heading" class="zpelement zpelem-heading "><style> [data-element-id="elm_RcJv2FFD2-X9Hbxbh2jU3Q"].zpelem-heading { border-radius:1px; } </style><h2
 class="zpheading zpheading-style-none zpheading-align-left " data-editor="true"><span style="font-size:16px;">Related Posts</span></h2></div>
<div data-element-id="elm_c2kTzMeDumaP39oTTMD1kA" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_c2kTzMeDumaP39oTTMD1kA"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><p><span><span style="color:inherit;"><a href="https://blog.icefire.ca/blogs/post/harepoint-online-language-settings-and-the-instant-toggle-trick" title="SharePoint Online Language Settings &amp; the Instant Toggle Trick" target="_blank" rel="">SharePoint Online Language Settings &amp; the Instant Toggle Trick</a></span><a href="https://blog.icefire.ca/blogs/post/harepoint-online-language-settings-and-the-instant-toggle-trick" title="SharePoint Online Language Settings &amp; the Instant Toggle Trick" target="_blank" rel=""><br></a></span></p><p><span style="color:inherit;"><a href="https://blog.icefire.ca/blogs/post/sharepoint-multilingual-page-publishing-feature-in-detail" title="SharePoint Multilingual Page Publishing Feature in Detail" target="_blank" rel="">SharePoint Multilingual Page Publishing Feature in Detail</a></span><span><a href="https://blog.icefire.ca/blogs/post/sharepoint-multilingual-page-publishing-feature-in-detail" title="SharePoint Multilingual Page Publishing Feature in Detail" target="_blank" rel=""><br></a></span></p><p><span style="color:inherit;"><a href="https://blog.icefire.ca/blogs/post/ew-product-releases-for-sharepoint-online-and-sharepoint-2019" rel="">New product releases for SharePoint Online and SharePoint 2019</a></span><br></p></div>
</div></div></div></div></div></div> ]]></content:encoded><pubDate>Wed, 17 Feb 2021 23:02:00 -0500</pubDate></item></channel></rss>