Ответ №1:
Если вы собираетесь использовать fmt: message с fmt: setBundle и fmt: setLocale, вам понадобится тег fmt. Это очевидно, я уверен. Однако, кроме того, если у вас есть файл jsp, который включает в себя другой файл jsp, использующий тег jsp: include, и включенный файл - это файл, содержащий теги fmt, то тег fmt переходит во включаемый файл, а НЕ в файле оболочки.
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
Ответ № 2:
Мне не удалось заставить работать следующее. Eclipse сказал, что тег fmt: setBundle должен быть пустым. Однако в Интернете я видел примеры, в которых тег fmt: message был вложен в теги open и close тегов fmt: setBundle.
<fmt:setBundle basename="message">
<fmt:message key="name"/>
</fmt:setBundle>
См .: https://www.baeldung.com/jstl
Я был в состоянии заставить работать следующее.
<fmt:setLocale value="en_US" />
<fmt:setBundle basename="com.studypartner.properties.message" var="lang"/> // approach #1
<h1><fmt:message key="name" bundle="${lang}" /></h1>
<fmt:setBundle basename="message" var="lang"/> // approach #2
<h1><fmt:message key="name" bundle="${lang}" /></h1>
Чтобы сделать этот код i18n, вы можете установить для языкового стандарта любое значение из списка кодов language_COUNTRY, и если у вас есть соответствующий файл свойств, приведенный выше код выведет значение ключа «name» на страницу. Например, я создал файл свойств с именем «message_en_US.properties». Так как я установил для локали «en_US», а конец базового имени - «message», будет найден файл свойств, который у меня есть, и ключ «name», который находится в этом файле и соответствует тегу fmt: message, в конечном итоге в теге выше. Эта часть о «lang» в приведенных выше тегах просто необходима для связи пакета с сообщением.
См .: https://www.tutorialspoint.com/jsp/jstl_format_message_tag.htm
Вот список кодов языков и стран:
https://docs.oracle.com/cd/E13214_01/wli/docs92/xref/xqisocodes.html
Ответ № 3:
Хорошо, посмотрите на код «заход на посадку № 1» и «заход на посадку № 2» снова, в ответе № 2. Почему я это повторил? Я хотел доказать, что любой подход будет работать. Кажется, что важно разместить файл свойств в правильном месте. Однако в веб-проекте Maven Spring 3 Java вы можете найти его в нескольких удивительных местах, и он подойдет для любого из них. Взгляните на настройки проекта по ссылке ниже:
настройка проекта
Во-первых, если у вас нет файла message_en_US.properties, но у вас есть файл message.properties, то тег fmt: setBundle все равно будет работать. Кроме того, вы можете разместить файл свойств в 3 разных местах, и он все равно будет работать.
a) src / main / java> com.studypartner.properties
b) src / main / resources> com> studypartner> properties
c) src / main / resources
"a" и "b" работают на
«с» работает на
Где, конечно, вы бы заменили «com.studypartner.properties» своим именем пакета (a, b) или именем вложенных папок (c).
По сути, это то, что они имеют в виду, когда говорят, что файл свойств должен находиться в вашем "classpath".