Я использую ReloadableResourceBundleMessageSource для хранения списка значений моей системы. Поэтому я могу использовать функциональность i18Nполучить все ключи от spring ReloadableResourceBundleMessageSource
Я использую несколько ресурсов в basenames ReloadableResourceBundleMessageSource. Я хочу передать всем локализованным ярлыкам веб-интерфейса клиенту (front-end), чтобы он был локально локализован на клиенте. Есть ли способ загрузить все ключи моих пакетов ресурсов?
здесь мое определение ReloadableResourceBundleMessageSource боб:
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basenames">
<list>
<value>classpath:resource1</value>
<value>classpath:resource2</value>
</list>
</property>
<property name="cacheSeconds" value="60"/>
<property name="defaultEncoding" value="UTF-8"/>
<property name="useCodeAsDefaultMessage" value="true"/>
</bean>
и это мой контроллер, передать все ключи:
@Component
@RequestMapping("/bundle")
public class ResourceBundleController {
@Autowired
private MessageSource messageSource;
@RequestMapping(value = "/locales.js")
public ModelAndView strings(HttpServletRequest request) {
// Call the string.jsp view
return new ModelAndView("/WEB-INF/includes/locales.jsp", "keys", ???);// HERE IS MY PROBLEM. HOW SHOULD I GET ALL THE KEYS FROM MESSAGESOURCE
}
}
и вот мой пакет ресурсов ключи для клиента:
<%@page contentType="text/javascript" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@taglib prefix="spring" uri="http://www.springframework.org/tags"%>
var messages = {};
<c:forEach var="key" items="${keys}">
messages["<spring:message text='${key}' javaScriptEscape='true'/>"] = "<spring:message code='${key}' javaScriptEscape='true' />";
</c:forEach>
Любая помощь будет оценена по достоинству.
Просто обновленный код –
Спасибо Pawel за ответ :) вы потрясающие. но у меня проблема с перезагрузкой ресурсов. если я изменяю значение из моего файла свойств, значение не обновляется на карте! также я установил cacheSeconds в 15. привет. –
проблема getMergedProperties (locale) .getProperties() не перезагружает результат. но если я использую getMessage (...), он вернет правильное значение. –