Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

how to get browser language via script include or function call

Eleven_TW
Tera Contributor

gs.getSession().getLanguage() will retrieve current session pre-defined language but I want to get browser langugage/language code as kind of backup.

 

navigator.language || navigator.userLanguage seems like not working since it will show error of navigator is not defined.

 

also tried to create a new class of script include, but seems like not working either as following:

var BrowserLocaleUtil = Class.create();
BrowserLocaleUtil.prototype = {
    initialize: function() {},

    getBrowserLocale: function(request) {
    var acceptLanguage = request.getHeader('Accept-Language');

    if (acceptLanguage) {
        var languageTag = acceptLanguage.split(',')[0];

        return languageTag;
    } else {
        return 'en';
    }
},

type: 'BrowserLocaleUtil'
};

and call in other script
var browserLocaleUtil = new BrowserLocaleUtil();

var browserLocale = browserLocaleUtil.getBrowserLocale(current.request);

 

Please help any JavaScript functions to retrieve the browser language code since there is potential missing from either service now user table or current session language set.

7 REPLIES 7

-O-
Kilo Patron

In the code above request is not defined.

Use GlideTransaction.get().getRequest() in place of request.

Also I would change acceptLanguage.split(',')[0] into acceptLanguage.split(',').shift().

-O-
Kilo Patron

Just wanted to add that this will only work in global scope - so make sure the Script Include is defined in global scope and is marked as accessible from all scopes.

Eleven_TW
Tera Contributor

Hi -O-,

Thank you so much for your details.

 

Everything works fine in background script, I can get locale using the following:

var acceptLanguage = GlideTransaction.get().getRequest().getHeader('Accept-Language');

var locale = acceptLanguage.split(',').shift();

gs.info(acceptLanguage);

=> 

*** Script: en-US,en;q=0.9

But after I created global script include as following:

 

Eleven_TW_0-1700599793324.png

and call it in my application script include via:

var browserUtils = new global.BrowserUtils();
var expectedLocale =  browserUtils.getBrowserLocale();

It shows error:

*** Script: Falied to get browser locale {"message":"Cannot convert null to an object.","rhinoException":{}}: no thrown error

 

Thanks in advance for your help!

Eleven_TW
Tera Contributor

Hi -O-,

Thank you so much for your details.

 

Everything works fine in background script, I can get locale using the following:

var acceptLanguage = GlideTransaction.get().getRequest().getHeader('Accept-Language');

var locale = acceptLanguage.split(',').shift();

gs.info(acceptLanguage);

=> 

*** Script: en-US,en;q=0.9

But after I created global script include (plz refer to the attached screenshot).

 

and call it in my application script include via:

var browserUtils = new global.BrowserUtils();
var expectedLocale =  browserUtils.getBrowserLocale();

It shows error:

*** Script: Falied to get browser locale {"message":"Cannot convert null to an object.","rhinoException":{}}: no thrown error

 

Thanks in advance for your help!