florrain/locale

Getting 'en_US.UTF-8' instead of 'en'

Opened this issue · 3 comments

When the browser sends a preference for 'en_US.UTF-8' and the provided locale list has 'en', I would expect the locale to be set to 'en', not the full string. Is that a wrong assumption?

I'm using express 4 and

import locale from 'locale'
const languages = ['en', 'nl']
app.use(locale(languages), (req, res, next) => {
		if (!languages.includes(req.locale)) {
			console.error(`!!! ${req.locale} was badly picked by locale`)
			req.locale = languages[0]
		}
		next()
})

to detect this situation.

You're probably getting the default locale which is automatically set to match the locale of the environment.

Hi @wmertens - Indeed, the lib doesn't know anything about the charset suffix right now. So the locale matching probably doesn't work at all if there's a charset. You can pass the default locale when you register the middleware: locale(languages, 'en') which should solve your issue.

Not an actual bug per se but input sanitization wouldn't hurt as it seems to be the common format to include the charset on UNIX environments. If someone is willing to hack this in a PR, it'd be very welcome.