Monday 12 June 2017

Express routing - Redirect based on locale

I am trying to set up routing for my multilingual website. My goal is to redirect the user based on his language (which is already detected).

This is my current unfinished code:

app.get('/(:lang)?', (req, res, next) => {
    const urlLang = req.params.lang || 'en'; // English is default
    const userLang = 'nl'; // Will be detected

    if (urlLang !== userLang) {
        // Wrong URL
        res.redirect(userLang + req.url);
    } else next();
});

In this example I try to subtract the requested language from the url (urlLang). If that language does not match the users language, then it should redirect to the proper URL.

A few examples of what I'm trying to achieve:

  • User with language en requests /: No redirect
  • User with language nl requests /: Redirect to /nl
  • User with language en requests /foo/bar: No redirect
  • User with language nl requests /foo/bar: Redirect to /nl/foo/bar

My current code only works if the requested path is / or /:lang, but not for routes like /home or /nl/home. I don't see how this can be achieved with express. Any help will be much appreciated!


Please note I have already set up everything else, like language detection, translation logic, views, etc. I am only asking about the routing.



via Duncan Luk

No comments:

Post a Comment