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
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
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!