That should not be the business of the site, but of the browser. It is precisely what Accept-Language is for. The site should respect the header, allowing circumvention should be a very low accessibility priority.
The site should respect explicit user actions. A get request to a /en/ domain, or a button click to a language icon should result changing to that language. Respecting implicit preferences that are more likely than not be just plain wrong anyways should be a very low priority, ideally shouldn't be done at all.