Since I'm an expat living in a country that has four official languages (all of them are still foreign to me) I feel entitled to rant about the internationalization and localization of software. Let's start:
1. Making it hard for users to change the language
Most of the websites and applications make educated guesses for which language they should display. This guesses are not always right. For example I'm using a company laptop where I cannot change language and Chrome reports my default language wrong, or I'm travelling and my IP address has nothing to do with the languages I know. Some software developers don't take this cases in considerations and once the language was guessed it's very hard for the user to change it. Usually because the configuration is hidden or missing completely.
My suggestion is to try to guess the language, but let the user change it easily and wrong guesses will be less annoying.
This can be done by putting language selectors in places that are visible and easy to reach. You should not have to scroll to find them and god forbid to require navigation through a menu structure in a language you're not familiar with. Some prefer to show a message when the "guess" happen to inform you about the automatic choice and also provide a short-cut to change it in case the guess was wrong. A message like "You were redirects to Language Name. You can change you language here in case you prefer something else". This will let you get away with hidden language controls, but will still presents a problem if the user has no idea about the language used for the message. I will never understand this message in Chinese for example, but if it will be one of the other languages accepted in my country/region I can probably guess pretty easy.