I have seen in several languages that (especially exceptions) offer message and localised message methods. But it is not clear to me what the difference is - do any of the following apply?
Furthermore when should the localized message be preferred over the regular message? Or conversely, not?
This one:
Is this a physical location thing where the same message may be presented based on things like locale, timezone, etc.
Although it's usually just locale / culture, really.
Basically imagine that an error message of "The value must be greater than 0" might be represented as "La valeur doit être supérieure à 0" for French developers (courtesy of Google Translate; may not be idiomatic as an error message).
This is just applying the general concept of localization (making your code communicate in the language/culture of your user) to a specific case of error messages though.
See more on this question at Stackoverflow