Domanda

I'm stuck with a stupid problem: How to work with optional locale parameter?

That's what I mean:

For example, I have frontpage and contacts, here is routes:

app.get('/', frontpage.get);
app.get('/contacts', contacts.get);

Now I'm trying to add localization to my site

app.all('/:lang?*', language.all); -> detect and set locale
app.get('/:lang?', frontpage.get);
app.get('/:lang?/contacts', contacts.get);

The only problem is when I don't use lang-parameter in URL:

mysite.com/contacts

because Express uses 'contacts' as a language parameter. (+ I don't like this copy-pasted :lang?)

I think, I just took the wrong way.

How to use locale parameter from URL in Express?

PS: I dont want to use subdomains de.mysite.com or querystring mysite.com?lang=de. I want exactly this variant mysite.com/de

È stato utile?

Soluzione

Most modules use Accept-Language so I can't find any that use the path like this that you might be able to use. So you'll need to define your own middleware that initializes before everything else. Express's Router doesn't really help for your usecase.

app.use(function(req, res, next){
    var match = req.url.match(/^\/([A-Z]{2})([\/\?].*)?$/i);
    if (match){
        req.lang = match[1];
        req.url = match[2] || '/';
    }
    next();
});

Now you can use req.lang in your routes or other middleware to configure your translation logic and since we have rewritten the URL, later logic will not know that there is a language param.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top