To enable multilanguage support in ExpressJS we have to define how our application handles route parameters.
We can use the following parameter:
:lang([a-z]{2})?
which matches a two-letters language code and it's made optional by the ?
modifier. An example:
'use strict';
const app = require('expresss')();
const locales = require('./lib/i18n');
app.get('/:lang([a-z]{2})?', (req, res) => {
let lang = req.params.lang;
if(locales.hasOwnProperty(lang)) {
let locale = locales[lang];
// Passing the current locale to the view
}
});
The above route matches site.tld, site.tld/en or site.tld/de. We can define our locales as follows:
'use strict';
module.exports = {
it: {
title: 'Ciao mondo'
},
en: {
title: 'Hello world'
},
de: {
title: 'Hallo Welt'
}
};