Languages, Office 365, and PointFire 365
MARTIN LAPLANTECEO, ICEFIRE STUDIOS, CANADA
SUMMARY
• Historical background• Language & MUI in SharePoint 2016 & O365• User Language Settings• PointFire on-prem and PointFire 365• Brief Demo• Machine Translation & other topics if time allows
Tower of Babel: Quick Recap
• After the great flood destroyed everything, God put a rainbow in the cloud.
• It was the promise of a new relationship.• Cloud: scary→ reassuring.• Noah’s descendants wanted to build a tower that would
reach the cloud.
Genesis 11A tower, whose top may reach unto heaven
• Because humans are one people with one language, anything that they want to do is possible.
• But God decided to go down there and confound their language, so they can’t collaborate.
• God scattered them by language upon the face of all the earth.
• The project to reach the cloud was abandoned.
2016/O365 and Languages
• Variations• Managed Metadata• MUI (Multilingual User Interface)• Machine Translation
Change Default Language of an O365 Site Collection? • MSFT support:
• “If the requirement is strong for your organization, from our back end, we can help change it. However, we need to delete all site collections and re-create them, which also means all data will be deleted.”
• For My Site, this will also delete every user’s OneDrive for Business documents.
• Ouch! Easier to segregate users by language?• Your choice: great flood that destroys all, or scatter your users upon
the face of all the earth?• Or you can use PointFire
USER LANGUAGE SETTINGSWhat Sets User MUI Language?
• 2007: Site’s base language only, no alternate languages
• 2010: Menu toggle sets cookie• 2013: Browser or user profile.• O365: It’s complicated
7+ Language Settings
Base language Alt languages
Browserlanguagerankedlist
Profilelanguagelist
Base language Alt languages
O365 Account language
SP site settings
Browser settings
Add-in site settings
O365 Account
My ProfileO365 Profile
Which one?
First one on the list that matches base or alt language. Mapping: regional variants
Ignore browser if this list overlaps site languages
On change, changes profile setting
Make them match ↑
Delay in Profile Change
Changes Propagate at Different Rates
English → Spanish → German
OneDrive UI Language Behaves LikeSharePoint
The Instant Toggle Trick
1.Account setting that has no overlap with base + alt languages
2.Profile setting blank, or no overlap with base + alt languages
3.Go home, come back tomorrow4.Now change browser settings• Effect is instantaneous, but training needed
PointFire On Premise
• For SharePoint 2007, 2010, 2013, 2016• Ensures that 2 different users going to the same URL will
each see it be entirely in their own language• Does not segregate users and content on separate sites• Solution includes feature, http module, web parts• Runs on the server, interacts with SharePoint and IIS• Modifies and filters text on the server• None of those techniques work in Office 365
PointFire 365 v 1.1 functionality• SharePoint-hosted app
• None of your content goes to our server
• Configures SharePoint MUI & localization• Shows/hides web parts according to language• Filters content of lists, libraries, calendars according to language
• User can turn off filtering
• Filters other web parts including search• Redirects pages according to language• “Manage Variations” interface to set relationship between pages,
items
DEMO
PF 365 version 2 functionality
• Language toggle• Slow but steady
• Change date, number, currency formatting with language• Machine Translation of items & documents• Translate UI customizations using combination of user-
defined translations list and machine translation• Better support of Modern Libraries• More admin & provisioning features
MACHINE TRANSLATION
French says: “Buff the sausage”
SharePoint’s Machine Translation Service• SharePoint Service Application• Connects to Microsoft Translator
• Similar back end to Bing translation engine• Custom version for SharePoint users• Statistical engine, now with deep learning • On-premise – you can set it up to train with your own documents
• Used in Variations• Used in Managed Metadata• Available through API
Machine Translation Has Some Risks
Machine Translation Service is Sometimes Unavailable
Check Translations with Context•¡Oye! ¿Cómo se escribe “papa” en Inglés?
• “Potato”.• Gracias.
Machine Translation:Write for Translation• Microsoft Global English experiment• Microsoft Manual of Style• Global English Syntax
• Use short sentences• Avoid sentence fragments• Use optional pronouns – that, who• Use optional articles – the• Use optional punctuation• Keep adjectives & adverbs close,
watch “only”
• Machine Translation Syntax• But not too short• Present participle vs. gerunds• Past participles vs adjectives• Limit coordinate conjunctions
– and, or, but• Capitalize correctly
Localizing Add-ins
• Localization vs. Globalization• Site Language vs. User Language
• At time of creating add-in site, template elements set according to site or user language
• Stays in that language even when user selects alternative language
• At run-time, change the display using JS file selected according to user UI language
Globalize Add-ins
• SharePoint-hosted or injected branding JS files• Language-specific “Resources.nn-NN.js” file solutions
• Remote components: Request.QueryString["SPLanguage"]• Add-in domain has no easy access to user language in host domain
(JS XSS security)• However, if alternate languages match, then user language
matches• Note: add-in domain may not have same alternate languages
activated• {add-in web name} /_layouts/15/muisetng.aspx
JS for Globalization Based on User Language
<script type="text/javascript" src="../scripts/Resources.<SharePoint:EncodedLiteral runat='server' text='<%$Resources:wss,language_value%>' EncodeMethod='HtmlEncode' />.js"></script>
• Load language-specific JS file Resources.nn-NN.js
• This JS file should contain localized string values
• Replace strings using JS<h2 id="heading">Bookshop</h2><script type="text/javascript"> window.onload = function () { document.getElementById("heading").innerText = localizedheading; } </script>
var localizedheading = "Librería";
Localized PnP Provisioning<pnp:Provisioning xmlns:pnp="http://schemas.dev.office.com/PnP/2015/12/ProvisioningSchema"> <pnp:Preferences Generator="OfficeDevPnP.Core, Version=2.0.1601.0, Culture=neutral, PublicKeyToken=null" /> <pnp:Localizations> <pnp:Localization LCID="1033" Name="English" ResourceFile="SiteTemplate-en.resx"/> <pnp:Localization LCID="1043" Name="Dutch" ResourceFile="SiteTemplate-nl.resx"/> </pnp:Localizations>
• PnP Localization using .resx & tokens, based on Site Language
<pnp:Templates ID="CONTAINER-TEMPLATE-8C075A44E60F4E82B8F013637DB1E654"> <pnp:ProvisioningTemplate ID="TEMPLATE-8C075A44E60F4E82B8F013637DB1E654" Version="1"> <pnp:Lists> <pnp:ListInstance Title="{resource:myListTitle}" Description="{resource:myListDesc}" DocumentTemplate="" OnQuickLaunch="true" TemplateType="105" Url="Lists/my" MinorVersionLimit="0" MaxVersionLimit="0" DraftVersionVisibility="0" TemplateFeatureID="00bfea71-7e6d-4186-9ba8-c047ac750105" EnableFolderCreation="false">
• Token identifiers, all equivalent: {localization:<key>} , {localize:<key>} , {loc:<key>} , {resource:<key>}, {res:<key>}.