У меня странная проблема, когда локализация работает отлично, кроме как на наших страницах с ошибками.
Я использую инфраструктуру Stripes, пакеты ресурсов и тег JSTL для локализации своих страниц. Локаль определяется рамкой Stripes. Согласно документации Stripes :
Stripes использует HttpServletRequestWrapper для вызовов request.getLocale () и request.getLocales (), возвращающих только выбранную локаль. Это означает, что не только Stripes будет использовать правильный языковой стандарт без необходимости его повторного определения, но и то, что любой другой инструмент локализации, использующий request.getLocales, должен также по умолчанию использовать правильный языковой стандарт. Это включает в себя теги JSTL fmt: * - круто, да?
Это прекрасно работает везде, кроме случаев, когда возникает ошибка 404 или 500, что указывает на нашу страницу ошибок, которая настроена следующим образом в web.xml:
<error-page>
<error-code>404</error-code>
<location>/error.jsp</location>
</error-page>
Если я перехожу непосредственно к странице ошибки, локализация работает нормально. Например, если я уже установил язык на испанский, перейдите по этой ссылке, страница отобразится на испанском языке:
http://localhost:8080/error.jsp
Но если я установлю язык на испанский, а затем перейду к:
http://localhost:8080/this-page-does-not-exist-create-a-404-error
Появляется та же страница ошибки, но отображается на английском языке.
Почему это так и как мне это исправить? Я искал все без результатов!
Я должен добавить, что я пытался проверить request.getLocale () вручную, и для него установлено значение en_US.
В коде, который устанавливает Locale, мы также устанавливаем некоторые атрибуты сеанса, "lang" и "country".
В качестве обходного пути я обнаружил, что могу читать эти атрибуты и восстанавливать локаль, но мне хотелось бы знать, почему это происходит в первую очередь.