As reported by Mattias Reichel (mattias@originalab.se): Currently, when the accept-language header is MISSING the locale chosen is the system default locale and not the fallback locale. I think the fallback locale should be checked first also in this case and only if no fallback locale is specified should the system default locale be used.
Indeed, this is a bug. It comes from the fact that HttpServletRequest.getLocales() returns the server's default locale if the request did not specify a preferred language. We therefore need to verify if no preferred locale has been specified in the request and use the fallback locale if that is the case.
This is now fixed in JSTL 1.1.