Имеются следующие файлы свойств ResourceBundle:
- messages.properties
- messages_en.properties
- messages_es.properties
- messages_ {некоторая локаль} .properties
Примечание: messages.properties содержит все сообщения для локали по умолчанию. messages_en.properties действительно пуст - это просто для корректности. messages_en.properties будет возвращаться к messages.properties!
И учитывая следующие параметры конфигурации в web.xml:
<context-param>
<param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
<param-value>messages</param-value>
</context-param>
<context-param>
<param-name>javax.servlet.jsp.jstl.fmt.fallbackLocale</param-name>
<param-value>en</param-value>
</context-param>
Я ожидаю, что если выбранный языковой стандарт - «es», а ресурс не переведен в «es», то он вернется к «en» и, наконец, к «messages.properties» (так как messages_en.properties пусто).
Вот как все работает в Причал. Я также проверил это в WebSphere.
Смола является проблемой
Проблема в том, когда я добираюсь до смолы (3.0.23). Резервное разрешение не работает вообще! Чтобы получить сообщения для отображения, я должен сделать следующее:
- Переименовать messages.properties в messages_en.properties (по сути, swap содержимое messages.properties и messages_en.properties)
- Убедитесь, что когда-либо вводят messages_en.properties также в messages_ {любой другой локали} .properties (даже если он точно такой же).
Если я не делаю этого, я получаю "??? some.key ???" в JSP.
Пожалуйста, помогите! Это сбивает с толку.
-
LES
РЕШЕНИЕ
Добавить следующее в pom.xml (если вы используете maven)
...
<properties>
<taglibs.version>1.1.2</taglibs.version>
</properties>
...
<!--
Resin ships with a crappy JSTL implementation that doesn't work with
fallback locales for resource bundles correctly; we therefore include
our own JSTL implementation in the WAR, and avoid this problem. This
can be removed if the target container is not resin.
-->
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>${taglibs.version}</version>
<scope>compile</scope>
</dependency>