<?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/365/feed" rel="self" type="application/rss+xml"/><title>The PointFire Blog - The PointFire Blog for Multilingual SharePoint #365</title><description>The PointFire Blog - The PointFire Blog for Multilingual SharePoint #365</description><link>https://blog.icefire.ca/blogs/tag/365</link><lastBuildDate>Wed, 16 Jul 2025 15:47:21 -0700</lastBuildDate><generator>http://zoho.com/sites/</generator><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[Microsoft Lists Templates are Unilingual]]></title><link>https://blog.icefire.ca/blogs/post/microsoft-lists-templates-are-uniligual2</link><description><![CDATA[<img align="left" hspace="5" src="https://blog.icefire.ca/download-1.png"/>Now that list creation experience is making it easier to create lists from templates, and before the ability to create your own list templates rolls o ]]></description><content:encoded><![CDATA[<div class="zpcontent-container blogpost-container "><div data-element-id="elm_Ecv0tNr4Q1qWYriTZuGelg" data-element-type="section" class="zpsection "><style type="text/css"></style><div class="zpcontainer-fluid zpcontainer"><div data-element-id="elm_ZNoei9dmSzaIO6xLHMAkLw" 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_Ulyti2UJRU6DRzrrGG6Ulg" 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_TA0y5sA2Q56oEseM80tRYg" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_TA0y5sA2Q56oEseM80tRYg"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-center " data-editor="true"><p style="text-align:left;margin-bottom:15px;"><span style="font-size:16px;">Now that list creation experience is making it easier to create lists from templates, and before the ability to create your own list templates rolls out, I thought I would point out that these Microsoft list templates are mostly unilingual.</span></p><p><span style="color:inherit;font-size:16px;"></span></p><p style="text-align:left;margin-bottom:15px;"><span style="font-size:16px;">Creating a new list from a template is very convenient, and it can be done in any language, and on any site, but the lists themselves are unilingual and are in the language of the user at the time that the list was created.</span></p><p style="text-align:left;margin-bottom:15px;"><span style="font-size:16px;"><br></span></p><p style="text-align:left;margin-bottom:15px;">TEST CHANGE HERE</p></div>
</div><div data-element-id="elm_ksEhK0QVnD8xVY3jJSQ2yg" data-element-type="image" class="zpelement zpelem-image "><style> [data-element-id="elm_ksEhK0QVnD8xVY3jJSQ2yg"].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="/download-1.png" size="original" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_tW0ugeD6zMcPhp-Q1y-YEg" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_tW0ugeD6zMcPhp-Q1y-YEg"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><p style="margin-bottom:15px;"><span style="font-size:16px;">The language of the user depends on several things, including the alternate languages of the site.&nbsp; The Microsoft Lists site itself can have alternate languages.&nbsp; Depending on the year when your “my site” or OneDrive was created, it might have only one language or all languages activated.&nbsp; You can check this by modifying the URL while on a Microsoft Lists or OneDrive site (it’s the same site) to this:</span></p><p style="margin-bottom:15px;"><span style="font-size:16px;">https://tenant-my.sharepoint.com/personal/(youremail)/_layouts/15/muisetng.aspx</span></p><p style="margin-bottom:15px;"><span style="font-size:16px;">When a list is created from a template, the names and descriptions of the list and the columns are created using the current language of the person who is creating the list, no matter the base language of the site.&nbsp; If my language is English and I create a travel requests list, it is completely in English.</span></p><p><span style="color:inherit;font-size:16px;"></span></p><p style="margin-bottom:15px;"><span style="font-size:16px;">If I change my language and display the same list, it is also completely in English, or almost.&nbsp; In the image below, where my language is French, you see that the word ‘’Today” in the date fields is replaced with the word “Aujourd’hui”</span></p></div>
</div><div data-element-id="elm_UOeFCIb8W8i0E8xrArEgSQ" data-element-type="image" class="zpelement zpelem-image "><style> [data-element-id="elm_UOeFCIb8W8i0E8xrArEgSQ"].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="/TRAVEL-1.png" size="original" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_dfeL_V2g62kSU7sk7uz4OQ" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_dfeL_V2g62kSU7sk7uz4OQ"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><p style="margin-bottom:15px;"><span style="font-size:16px;">This is different from the old “create a custom list” experience, where at least the “Title” column would have a different name in different languages right from the start.<br><br>If my language is French at the time of creating a list from a template, it will create the list in French, even on a site where English is the site’s base language.</span></p><p><span style="color:inherit;font-size:16px;"></span></p><p style="margin-bottom:15px;"><span style="font-size:16px;">In the image below I created the list from the “Issue Tracking” template while my language was French, then changed my language to German.</span></p></div>
</div><div data-element-id="elm_b1Ht5EEcoFs0yOiyD2Nz1g" data-element-type="image" class="zpelement zpelem-image "><style> [data-element-id="elm_b1Ht5EEcoFs0yOiyD2Nz1g"].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-fit zpimage-tablet-fallback-fit zpimage-mobile-fallback-fit 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="/ISSUE-1.png" size="fit" data-lightbox="true" style="width:100%;padding:0px;margin:0px;"/></picture></span></figure></div>
</div><div data-element-id="elm_sRXHpED6nTOGfjg1FBxq_A" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_sRXHpED6nTOGfjg1FBxq_A"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><p style="margin-bottom:15px;"><span style="font-size:16px;">The column “Anlagen” (attachment) is the only column which is translated out of the box, all the others are still in French.&nbsp; It is possible to use the SharePoint MUI to add translations of the list and columns names and descriptions in all languages.&nbsp; I cheated and used PointFire 365 to translate them all in a single step.&nbsp; When that is done, the list headers are in the language of the user.</span></p><p><span style="color:inherit;font-size:16px;"></span></p><p style="margin-bottom:15px;"><span style="font-size:16px;">One thing that cannot be localized with the MUI is the values of Choice columns.&nbsp; So for instance the possible values of the “Priority” column will be “Critique”, “Élevé”, “Normal”, and “Faible” in all languages.&nbsp; The JSON that formats these columns is also generated in French in this case, where the formatting depends of the value of the column (in French).</span></p></div>
</div><div data-element-id="elm_uu7XkxuNqUuah6K_P36-aw" data-element-type="image" class="zpelement zpelem-image "><style> [data-element-id="elm_uu7XkxuNqUuah6K_P36-aw"].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="/JSON-1.png" size="original" data-lightbox="true"/></picture></span></figure></div>
</div><div data-element-id="elm_ibwQmii_x7JHzntilX-Rfw" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_ibwQmii_x7JHzntilX-Rfw"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><p><span style="color:inherit;font-size:16px;">You will also notice in the JSON that even though the list was created in French, the internal name of the column “Priority” is in English, and in fact is the same internal name in all languages.&nbsp; That is handy when you write thing like Power Automate flows or PowerShell scripts, you don’t need to write different ones in different languages as long as you always refer to the internal name of the column, not the column title.&nbsp; While you’re at it, if you’re writing JSON for formatting, make sure that everything is based on the @currentField, not @currentField.displayValue or friendly formats, because those can be language-sensitive and stop working when users have a different language.</span><br></p></div>
</div><div data-element-id="elm_kgt9pgoU16HyjHwnb9tN-w" data-element-type="divider" class="zpelement zpelem-divider "><style type="text/css"> [data-element-id="elm_kgt9pgoU16HyjHwnb9tN-w"].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_twvbXb3NuB3T3IzsfCgP0A" data-element-type="heading" class="zpelement zpelem-heading "><style> [data-element-id="elm_twvbXb3NuB3T3IzsfCgP0A"].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_-yRhAGGB49e49uNqu12aaA" data-element-type="text" class="zpelement zpelem-text "><style> [data-element-id="elm_-yRhAGGB49e49uNqu12aaA"].zpelem-text{ border-radius:1px; } </style><div class="zptext zptext-align-left " data-editor="true"><p><span style="color:inherit;"><a href="https://blog.icefire.ca/blogs/post/localization-of-spfx-webparts-in-microsoft-teams-tabs" title="Localization of SPFx webparts in Microsoft Teams tabs" rel="">Localization of SPFx webparts in Microsoft Teams tabs</a></span></p><p><a href="https://blog.icefire.ca/blogs/post/how-microsoft-forms-sets-the-display-language-for-multilingual-forms" rel="">How Microsoft Forms Sets the Display Language for Multilingual Forms</a><br></p><p><span style="color:inherit;"><a href="https://blog.icefire.ca/blogs/post/how-to-make-sharepoint-api-calls-language-independent" rel="">How to make SharePoint API calls language-independent</a></span><br></p></div>
</div></div></div></div></div></div> ]]></content:encoded><pubDate>Tue, 30 Mar 2021 06:03:00 -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>