javascriptgoogle-chromegoogle-chrome-headlesspuppeteerbrowser-testing

How to specify browser language in Puppeteer


I would like to launch a Google Chrome browser with language Spanish es using Puppeteer.

I've tried puppeteer.launch(args:['--lang=es',...],...) but it didn't work.

I've tried passing the environment variable LANGUAGE=es mocha puppeteer-test.js but it didn't work.

I've tried using the userDataDir option and passing a folder with a Preferences file a { "intl": { "accept_languages": "es" } } but the browser Settings - Languages still don't show Spanish and neither does window.navigator.languages neither window.navigator.language

I'm using
Puppeteer 0.11.0
Node 8.4.0
NPM 5.2.0
macOS El Capitan 10.11.6
MacBook Pro Retina, 15-inch, Mid 2015


Solution

  • There are several ways to change locale, you can try all of them to find what works for you,

    Use Args when launching

    const browser = await puppeteer.launch({
        headless: false,
        args: ['--lang=bn-BD,bn']
    });
    

    Send the language as Header

    await page.setExtraHTTPHeaders({
        'Accept-Language': 'bn'
    });
    

    Forcefully set the language

    // Set the language forcefully on javascript
    await page.evaluateOnNewDocument(() => {
        Object.defineProperty(navigator, "language", {
            get: function() {
                return "bn-BD";
            }
        });
        Object.defineProperty(navigator, "languages", {
            get: function() {
                return ["bn-BD", "bn"];
            }
        });
    });
    

    For the sake of testing, I'll test this in multiple languages, including es, and here is the result.

    Google search:

    es bn

    BrowserLeaks:

    enter image description here