Need to add a Language Selector for your portal (i... - ServiceNow Community
Alex Coope - SN
ServiceNow Employee
ServiceNow Employee

As the platform has been growing over the years, the use-cases have massively expanded. For example, when I started my SN journey way back when, we only needed to consider purely internal employee scenarios and so the expectation of an end-user needing to change their session language was so rare it wasn't really a need to cater for in portals. This was because as we would import users either via LDAP or other Account sources we could set their language preference in that process.

However, now that we have the likes of CSM etc, things are very different. Not only could a user need to change their language via the portal, they may also not yet be a registered / authenticated user. So in the Tokyo release we've added a whole bunch of features to cater for that.

This is going to be quite long, so get a warm cup of coffee ready and some nibbles, because there's a lot to get through. Let's begin...

 

 

The Dream

find_real_file.png

For quite a while we've wanted to be able to do this for any user right? In fact, I've even blogged about this idea for authenticated users in the past here detailing the various UX considerations to think about for this type of scenario. And for authenticated users it's not really been a massive problem because we've been able to add the "language-switcher" widget to cover that scenario, the challenge has always been for non-authenticated users.

Over the years, some people have tried to create logic on the "Guest" user, but the problem with that approach was that every non-authenticated user uses that account. So if you change the language for "Guest" you are in effect changing it for every non-authenticated user at the same time = not good let alone ideal.

So in the Tokyo release we've created the ability to show a switcher in the header (by default!)

 

 

How do we achieve this magic?

Let's get the first elephant out the way, yes you still need to install your language or have an active language record and add the translations - this isn't a short cut. So in my screenshot above, this is showing what is available on the instance I took the image from.

There are a few short steps to perform in order to show the widget:

Step1 - find the property glide.sp.portals.language_selector_enabled You will then need to enter in the sys_id of the portal in question (it's a comma separated list incase you want to add more than one),

If you need to revisit this because this step didn't work you can review the docs article here

 

Step2 - You will need to decide how granular you would like the selection to be:

Option 1 - With regional breakdowns:

Option 2 - without regional breakdown:

Note the difference in the selector, this is because we now have some clever tables that account for the Region vs the Country vs the Language (all part of the Locale support functionality I detail in the Language Support Guide post).

In the "System Localization" application, you will now see the following modules:
find_real_file.png

These tables essentially allow you to create a pyramid of data as per your needs. You may even find there are some pre-populations after your upgrade.

For a quick reference:
Language Regions -> [sys_language_region]
Languages -> [sys_language] the very same table you've known for years
Regions -> [sys_i18n_region]

To learn more about how to use these tables, check the docs article here.

 

 

To add it to the /esc portals

Currently, ootb the widget is not included on the /esc portals. It might in the future but ootb it isn't. So we will need to make some modifications to the Theme's > Header in order to call it.

 

In the "Body HTML template" field you will need to add the following code:

 

 

 

 

 

<!-- Language Selector Menu -->
<sp-widget widget="::data.langSelector"></sp-widget>

 

 

 

 

 

 

In the screenshot below, you can see I placed mine just before the "Header Navbar" (where you place it is important):

AlexCoopeSN_0-1668070327452.png

 

Then in the "Server Script" field you will need to add the following code:

 

 

 

 

 

data.langSelector = $sp.getWidget('sp-lang-selector');

 

 

 

 

 

 

AlexCoopeSN_2-1668070599213.png

 

Important note - because you are modifying the portal's header, you will likely get a fair few Cross Scope privilege errors. So you will need to re-approve these (either manually, or via the method provided)

 

If the above method does not work, then you can try something like this as a fix script (I can't promise it will work for your specific set up, just that the concept in principle should work):

 

 

 

 

 

// fix /esc portal errors
var check = new GlideRecord('sys_restricted_caller_access');
check.addEncodedQuery('sys_scopeSAMEAStarget_scope^status!=2^ORstatus=NULL^source!=1f7e93f01b982410ca4955bf034bcb16^ORsource=NULL');
check.query();
while(check.next()){
 check.status='2';
 check.update();
}

 

 

 

 

 

 

When done correctly, this should then present on the /esc portal like this:

AlexCoopeSN_1-1668070511057.png

 

 

**Update**

If you are having some issues with languages not showing, this almost certainly will be due to a lack of labels. If you go to the [sys_language] table and expose the "Display Label" field via the cog on a list (this is a personal customization of the list rather than a system one as we have to remember best practice 🙂 ). You'll need to ensure that every record has a value in that field, then they will show in the widget.

For reference, this field was added in the Tokyo release for some new features and some future features.

 

 

So what have we learned?

Because of our various communities feedback, and the constant evolution of use-cases in the platform, we have added some extremely powerful new features. You now have the ability to present users who are or are not logged in with the ability to easily change their language - with no code required.

The super cool bit is, for a non-authenticated user, if they change their language it will be persistent (and used as their first language preference when they first login) because it will be stored in their browser's cookie until they become a fully logged in user.

 

As usual, if you found this post useful, please like share and subscribe for more as it always helps

 

Comments
Palash_Sarkar
ServiceNow Employee
ServiceNow Employee

Hi Alex

 

I tried the sp, csm, csp portal language picker and it worked perfectly. I thought it would be helpful to provide a few more detailed steps with screenshots.

 

1.1 To open the property list, type "sys_properties.list" in the navigator and press Enter key.

 

SN_Palash_0-1684474975896.png
1. 2 From the property list search for "glide.sp.portals.language_selector_enabled" record and open the form.

SN_Palash_2-1684475474845.png

 

1.3 Copy sp, csm, csp portals sys_id and set the Value field with a comma separator in the property form.

SN_Palash_3-1684476094198.png


1.4 Click the Update button to update the property settings.

SN_Palash_4-1684476212561.png

 

1.5 Confirm the language picker on the sp portal page.

SN_Palash_5-1684477164347.png

1.6 Confirm the language picker on the csm portal page.

SN_Palash_6-1684477253709.png

1.7 Confirm the language picker on the csp portal page.

 

SN_Palash_7-1684477315895.png

 

 

 

 

 

 

 

 

 

Alex Edmiston1
Giga Guru

@Palash_Sarkar  - did you have to configure anything in your portal header to achieve this? I configured the system property but it's not showing in the oob employee center header. 

Alex Coope - SN
ServiceNow Employee
ServiceNow Employee

@Alex Edmiston1,

I've updated the post with the answer (for adding it to the /esc portal) 👍 

Alex Edmiston1
Giga Guru

@Alex Coope - SN - that worked, thank you!

Jon Collins2
Kilo Sage

This is great; thank you for sharing. We just configured this on our portal. 

Alex Edmiston1
Giga Guru

Is it possible to have multiple versions of the language selector for different portals? Example: one portal shows the language picker with two languages and another portal shows the language picker with 5 languages. 

Alex Coope - SN
ServiceNow Employee
ServiceNow Employee

@Alex Edmiston1,

I'm afraid not, because the Language availability is determined at the instance level, and so is intended to be used for any user regardless of what interface they are using to ensure they have the best and most consistent User Experience possible. Meaning one interface in their native language and another only in English could be quite jarring for them.

I would also not suggest creating a custom widget to achieve this either, as it could introduce difficult to maintain technical debt. Instead, it is best practice to aim for consistency (of language offering) across the various portals if the end-users are of the same type (e.g. internal Employees interacting with IT or HR), which also leans into the idea of leveraging the /ESC portal rather than the older /SP portal to bring IT and HR together,

We actually have a workbook that you might find useful, available here,

Many thanks,
kind regards 

ASHU_1
Tera Contributor

@Alex Coope - SN What is the difference between the OOTB Language switcher widget from the Portal desgner Vs. Language Selector widget (the one you are showing up in this article).

 

Thanks!

Alex Coope - SN
ServiceNow Employee
ServiceNow Employee

@ASHU_1,

They are both ootb, the older "Language Switcher" widget is for placing on a page, where-as the one mentioned in this article is specifically from CSM to be placed in the menu bar (better UX), this newer widget also is available to external users hence why it's part of CSM natively,

 

 

Many thanks,

kind regards 

ASHU_1
Tera Contributor

@Alex Coope - SN Allow me to ask one more follow up Q - Can we have this new widget mentioned in this article on Employee Center (HR) which can be extended to external users (Alumni/Candidates/etc) just like it is in CSM?

Alex Coope - SN
ServiceNow Employee
ServiceNow Employee

@ASHU_1,

Absolutely, this article is exactly for explaining how to add it to a portal such as /esc. The screenshot you're seeing at the bottom of the post is even taken on my /esc portal,


Many thanks,
kind regards 

Janu sree
Tera Guru

Hi @Alex Coope - SN  - We have cloned & customized the language slector and placed it on the esc portal Megamenu at the right end of IT and HR, but when we are changing the language to German, Dutch, portugese, Russian the header and the megamenu are not visible. seems like the browser is getting expanded and when zoom-in to 90% then I can see the header and megamenu. Is there any resolution for this issue? any reasons why this is happening ?

Alex Coope - SN
ServiceNow Employee
ServiceNow Employee

@Janu sree,
That typically happens when the words used in those languages (and thus translations) are causing the UI to go over the boundary and so because the page is "reactive" it's ensuring a good user experience by tucking them into the hamburger menu on the right (very similar to how it is when you navigate to the page on a mobile device).

It's not an "issue" or a bug, this is intended behaviour. If it's potentially causing confusion for your users, it might be an idea to review your Taxonomy's topology and see if you can reduce the amount of top level items by merging some entries,

Many thanks,
kind regards 

kostyakozachuk
Tera Expert

Hi @Alex Coope - SN 

 

Would it be possible to preset the Service Portal language based on the user's browser settings? We are referring to the CSM portal, where some users may not be authenticated.

 

Thanks.

Alex Coope - SN
ServiceNow Employee
ServiceNow Employee

Hi @kostyakozachuk,

 That's actually an incredibly difficult thing to achieve because different browsers have different mechanisms of calling their "language" or "locale" values. 

For example in Chrome based browsers you can "detect" the user's locale with the following Javascript in the console:

AlexCoopeSN_0-1715066414710.png


The problem is, this is a BCP-47 locale prefix which won't correspond to a language record. The ootb "English" is an "ISO-639-1" code of "en" and not all languages follow the same convention. 

The widget itself is purposefully designed however to work for unauthenticated users in the CSM portal to allow them to set their language preference. My advice would therefore be to present a message to ask them to confirm their language, this will then be stored in their cookie on that browser until such time they have created an account and logged in where it will be stored on their user profile,
- the portal sys_id just needs to be added to the property for it to show in the CSM portal (none of the code changes mentioned above are required for the CSM portal),

Many thanks,
kind regards

Sabrina Devett
Tera Contributor

Hi! I have implemented this solution—thanks for sharing it! However, I'm missing some of the available instance languages in the picker, and I can't figure out how this is configured. Could it be that the languages are not part of the official language pack? 

Alex Coope - SN
ServiceNow Employee
ServiceNow Employee

Hi @Sabrina Devett ,

Assuming you've installed the language packs, and therefore assuming the languages in [sys_language] are "active=true" (they must be active languages) they should show. However, if you are using the "Region" mapping (due to the property) you may need to make some entries in [sys_language_region] like this (per region you want that language to show as):

AlexCoopeSN_0-1725026582336.png


For non-ootb provided languages (aka a "self localized" language) the logic is still such that the entry in [sys_language] for that given language is "active=true",

Many thanks,
kind regards

Sabrina Devett
Tera Contributor

@Alex Coope - SN Thanks for the quick answer! 

 

I've attached some screenshots - as you see I have several languages that is "active" but many of these are not showing in the language picker in portal. I have not set up Regions. 

 

 Screenshot 2024-08-30 at 16.51.04.pngScreenshot 2024-08-30 at 16.51.29.pngDo you have any good suggestions as to what the issue might be? I tried creating Regions and connecting some of the missing languages - fx "Danish" -, but then it just showed the region I made but with no language choice. 

Alex Coope - SN
ServiceNow Employee
ServiceNow Employee

@Sabrina Devett ,
On your language records in [sys_language], if you expose the column called "Display Label" (can do that via the cog to personalize the list), does every language have a value in that column? If not, could you try adding one,

Many thanks,
Kind regards

Sabrina Devett
Tera Contributor

@Alex Coope - SN  That did the trick - thank you so much! 

SergioDaviL
Tera Explorer

Hello everybody!

To @Alex Coope - SN, I would like to ask, since I don't want to open another topic, about a specific case in which I would like to be able to include this widget in a scoped application I am working in. The problem here is that I should style it, so I cloned it, added some custom class, and nothing much more.

In the moment I click the language selector, it tries to load but fails warning me with an uncaught error, that I found to be happening right when it calls the .focusout for the languagePopover (that remains at length 0), and opening a popup telling me the page was not found.
With more than little effort, I am trying to figure out how it really works, finding out that it loads a page, that I thought it was unaccessible since the referring link is relative and not absolute, so I cloned it also, in scope, and tried to give the href the full path.

 

Well, by now I couldn't find a way to make it work. I am almost sure I am missing and / or messing up something. But first of all, is that what I am trying to do a possible thing to do? And if it is, what should I try or provide as extra information to get some help about it?

 

Thanks in advance.

Alex Coope - SN
ServiceNow Employee
ServiceNow Employee

@SergioDaviL,

It sounds like it's due to a lack of a cross-scope privilege. You shouldn't need to clone the widget, if you scoped app you should be able to call as per above and once resolving the cross scope errors that will present, it should then work. 

The ootb one is actually part of CSM, but as you can see in the blog post we're allowing it to work in the "Employee Center" scope and portal (because it needs to call some functions in "global". I also would not suggest you try to remake it because it also leverages some hidden classes behind the scenes to ensure it changes languages for the user in a clean and consistent manner,

 

Many thanks,
Kind regards

SergioDaviL
Tera Explorer

@Alex Coope - SN ,

thanks for your support. 
I had to clone the widget for styling it, leaving the logic untouched. It sounds to me too that could be a cross scope privilege problem, this portal is getting complex, but I made a clone in the global scope itself. By the way, I found out that I didn't need the page cloned, and turns out that for my widget to work it needs to be present the original widget as well. I can't understand why, they are logically the same.

While trying to get the popup as I need it (meaning its css) I also figured out that I could just dynamically style the original widget as it is, even if I'm not sure if it is a good idea.

 

By now, I must assume that the language picker have no possibility to be styled as one pleases right?

Alex Coope - SN
ServiceNow Employee
ServiceNow Employee

@SergioDaviL,

As with any widget in a portal, the design is one part the style (colour, font etc) is typically inherited from the theme associated to the portal based on the named values in the theme,

Many thanks,
Kind regards

SergioDaviL
Tera Explorer

@Alex Coope - SN ,

thank you for your support. I was able to do the trick in the end.

By the way I would like to better understand something, if I need a core widget to be included in my instance, styling it, would I be still granted any further update of the widget itself? Are updates only about the logic or a different template would invalidate it? 

It may be a stupid question, but I sense that we  could do something more with our instances, and after all I am in service now by little more than one month (must say I am enjoying it).

 

Thanks.

 

AbdulNow
Tera Guru

Great!! Thanks for sharing!

Leri Andrews
Tera Guru

Apologies for re-activating an old thread, but I would value opinions on a suitable solution to my issue.

 

I have an ESC portal.  I have an issue where users are defaulting to the system language (English) and do not even realise they can change the language.

 

They are attempting to search in their native language and getting frustrated with lack of content. If they simply changed their language to say, Japanese, they would be able to search in Japanese and the fallback language English and have access to the globally-relevant English content and their local content which is primarily published only in Japanese.

 

Things we have tried:

1. A tour which mentions choosing language in users profile as the opening pop-up (before they can cancel the tour)

2. Targeted banner campaigns

3. Employee comms in certain countries

 

The portal has a pretty busy header - a cart, tours, tickets, actions, profile etc.  Adding a language selector as per your post is not going to look good and it will get lost.   Is there a OOTB or lo-customisation way of having a pop-up on first log-in that forces people to make some profile selections?

 

Thanks all!

Alex Coope - SN
ServiceNow Employee
ServiceNow Employee

Hi @Leri Andrews,

In theory, if you are also populating the "Country Code" field on the user record, and/or are associating the users to a Country via the "Location" field (even if it's further up the path, e.g. Building > City > Country) you could have either a BR for net new users, or a Scheduled job (run daily) to set a default language for users still on the system default value (the "preferred_language" field on the user record which would be "none" or empty) based on the location you can make an assumption from.

 

To make it scaleable you could even create a lookup table for holding a record per country + language permutation,

Many thanks,
Kind regards 

Leri Andrews
Tera Guru

Is there any chance of the ESC getting a language selector OOTB?  I'd much rather not customise a pop-up or the header or start running business rules to stop my users in China from assuming the portal is only available in English.

Alex Coope - SN
ServiceNow Employee
ServiceNow Employee

Hi @Leri Andrews,

Great question. I think for the time being the best thing would be if you could raise it as an IDEA so we can elevate it more 🙂,

Many thanks,
Kind regards 

Andrii Valiiev
Tera Explorer

@Leri Andrews and @Alex Coope - SN , actually, Language Selector is available in ESC as OOTB. Just it is not on the Header, as Alex has shown here in this article.

Having Language Selector on the Header is really nice for manual Translation testing, while in most cases it makes no sense for the real users, as users rarely to never change their language.

The OOTB capability of changing the language is supported in ESC as OOTB in two (2) ways:

  • if "Employee Profile" is not enabled and not being used, then you navigate to ["Avatar" > Profile] (it will open "hri_user_profile" page, unless you have Page Route Map redirect) and see Language Selector there; same view with Language Selector will be if you open someone's else profile, e.g. by clicking on someone's avatar on Ticket or Request page, or by opening someone's profile from Org Chart;
  • if you opt-in to "Employee Profile", so that navigating to ["Avatar" > Profile] opens "employee_profile" page with multi-tab view, which has no Language Selector - "Avatar" dropdown menu will get another link, which is "Preferences", and navigating to it ["Avatar" > Preferences] will open "preferences" page with Language Selector on it.

All these Language Selectors: (a) Header one, (b) User Profile, and (c) Preferences - work identically same way, though "Header" one has slightly different visual dropdown.

 

Screenshots from PDI:

1) "My Profile" / HRI User Profile [hri_user_profile]

Screenshot 2024-12-13 at 09.43.23.png

2) "User Profile" / User Profile [user_profile]

Screenshot 2024-12-13 at 09.43.52.png

3) "Employee Profile" / Employee Profile [employee_profile]

Screenshot 2024-12-13 at 09.44.10.png

4) "User Preferences" / Preferences [preferences]

Screenshot 2024-12-13 at 09.44.27.png

 

Alex Coope - SN
ServiceNow Employee
ServiceNow Employee

Hi @Andrii Valiiev,

Indeed there is support ootb, however with HR implementations (especially for multi-lingual use-cases) it is a far better UX (User Experience) when not in the user's native language to click the icon in the header as that is an already established paradigm (method) of doing such an activity in public websites. Rather than having to guess / assume to click on the avatar and then clicking a link (profile) that the person might not be able to read, then possibly scrolling down an entire page that the person also might not be able to read.

So, it's for sure something I'm championing because I do feel it's an important thing to add. I just can't promise if / when because I'm not the HR Portal Product owner 🙂

Many thanks,
kind regards

Leri Andrews
Tera Guru

Thanks both.  To be clear, my issue is that currently on our OOTB ESC portal users must enter their profile page to change language. If they do not do this then the portal defaults to English. There is no OOTB way for me to alert people that this ability to navigate the portal in their preferred language exists so we have situation where over 80% of our non-English speaking population are trying to navigate in English whilst searching in their native language and not finding anything.

Alex Coope - SN
ServiceNow Employee
ServiceNow Employee

Hi @Leri Andrews,

Have you tried this approach as a link provided to them?

Many thanks,
kind regards

anbarasanaa
Tera Contributor

In connect chat how to add multi language button: 

End users and ServiceDesk agent is using Chat Chameleon (when end users will type in native languages which will be converted into English for SD team) SD team will type/chat in English which will be converted into End users' native language using Chat chameleon translation. 

Alex Coope - SN
ServiceNow Employee
ServiceNow Employee

Hi @anbarasanaa,

This should really be for another thread as it's a different topic to the original post.

If you are referring to this "Connect Chat", then it's technically legacy I'm afraid so it wouldn't be able to use some of the more modern features. If however you mean Agent Chat, then this is able to utilise Dynamic Translation but as with any other use-case of Dynamic Translation you would need a subscription to a CloudMT provider (e.g. Google, MS etc) to receive the translations. When DTAC is enabled, the agent can turn it on in their workspace when in a Chat conversation (applied to all conversations as shown in the overview page linked),

Many thanks,
Kind regards

Sandeep D V
Tera Contributor

Hi @Alex Coope - SN 
I have implemented this solution but I am not seeing language picker on SP portal page.

HTML:

<div>
<nav class="navbar-inverse" ng-class="::{'navbar':!isViewNative, 'is-native': isViewNative}"
role="navigation">
<div ng-show="::!isViewNative" class="navbar-header">
<a class="navbar-brand" ng-if="::!portal.logo" href="?id={{::portal.homepage_dv}}"><span>{{::portal.title}}</span></a>
<a class="navbar-brand navbar-brand-logo" ng-if="::portal.logo" href="?id={{::portal.homepage_dv}}" aria-label="${Go to homepage}">
<img ng-src="{{::portal.logo}}" title="ServiceNow" role="presentation" alt="${Portal Logo}" />
</a>

<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#sp-nav-bar">
<span class="sr-only">${Toggle navigation}</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
</div>

<div sp-navbar-toggle="" class="collapse navbar-collapse navbar-right scrollable-dropdown" id="sp-nav-bar">
<!-- Include The Menu -->
<sp-widget widget="::data.menu"></sp-widget>
<!-- Language Selector Menu -->
<sp-widget widget="::data.langSelector"></sp-widget>
<ul ng-if="::(!user.logged_in && page.id != portal.login_page_dv && !data.hasLogin)" class="nav navbar-nav" role="presentation">
<li role="presentation"><a href ng-click="::openLogin()">${Login}</a></li>
</ul>
<ul ng-if="::user.logged_in" class="nav navbar-nav" role="menubar">
<!-- chat, avatar, and logout -->
<li ng-if="::data.connect_support_queue_id" role="presentation"><a href ng-click="openPopUp()" role="menuitem">${Live Chat}</a></li>
<li ng-if="showAvatar" class="hidden-xs dropdown" role="presentation">
<a href class="toggle-dropdown" data-toggle="dropdown" aria-expanded="false" title="{{::data.profileBtnMsg}}" aria-label="{{::data.profileBtnMsg}}: {{::user.name}}" id="profile-dropdown" role="menuitem" aria-haspopup="true">
<span class="navbar-avatar" aria-hidden="true"><sn-avatar class="avatar-small-medium" primary="avatarProfile" /></span>
<span class="visible-lg-inline">{{::user.name}}</span>
</a>
<ul class="dropdown-menu" role="menu" aria-label="{{::data.profileBtnMsg}}">
<li role="presentation"><a tabindex="-1" ng-href="?id=user_profile&sys_id={{::user.sys_id}}" role="menuitem">${Profile}</a></li>
<li ng-if="::!isViewNative" role="presentation"><a tabindex="-1" href="{{::portal.logoutUrl}}" role="menuitem">${Logout}</a></li>
</ul>
</li>
<li ng-if="showXSAvatar" class="visible-xs-block" role="presentation"><a role="menuitem" ng-href="?id=user_profile&sys_id={{::user.sys_id}}">
<span class="navbar-avatar"><sn-avatar class="avatar-small-medium" primary="avatarProfile" /></span>{{::user.name}}</a>
</li>
<li ng-if="::!isViewNative" class="visible-xs-block" role="presentation"><a role="menuitem" href="{{::portal.logoutUrl}}">${Logout}</a></li>
</ul>
</div>
</nav>
</div>

Server Script:

// Defines the support queue ID that will be linked to by the Live Chat link in header
data.connect_support_queue_id = $sp.getValue('sp_chat_queue');
data.login_page = $sp.getValue('login_page');
data.profileBtnMsg = gs.getMessage("User options");
var menu = $sp.getValue("sp_rectangle_menu");
data.menu = $sp.getWidgetFromInstance(menu);
data.langSelector = pm.isActive('com.glide.i18n')? $sp.getWidget('sp-lang-selector') : "";
if (data.menu && data.menu.data) {
    data.menu.data.replace = true;
    // Hide login if menu already has link to login
    data.hasLogin = false;
    if (data.menu.data.menu.items) {
        for(var i in data.menu.data.menu.items) {
            var item = data.menu.data.menu.items[i];
            if (item.type == 'page' && item.sp_page == data.login_page)
                data.hasLogin = true;
        }
    }
}

data.loginWidget = $sp.getWidgetFromInstance('login-modal');
Version history
Last update:
‎10-11-2024 08:26 AM
Updated by:
Contributors