У меня есть веб-приложение, которое использует Spring MVC. Я хотел бы, чтобы мой интерфейс состоял из одной страницы, которая динамически извлекала все данные в виде JSON через AJAX. Моя проблема с интернационализацией. Когда я визуализирую контент в jsps, я могу использовать JSTL-теги для разрешения моих ключей (очень легко с Spring MVC):
<fmt:message key="name"/>: ${name}
<fmt:message key="title"/>: ${title}
<fmt:message key="group"/>: ${group}
При правильной настройке он отображается на финском языке как
Nimi: yay
Otsikko: hoopla
Ryhmä: doo
Теперь, когда я использую json, я получаю только следующее сообщение от сервера:
{
name: "yay",
title: "hoopla",
group: "doo"
}
Там нет имен ключей! Но я должен предоставить их как-то. Я подумал об изменении имен ключей на их локализованные формы или добавлении локализованных имен ключей в вывод json (например, name_localized = "Nimi"), но оба эти варианта кажутся плохой практикой. Я использую Jackson JSON для автоматического разбора моих доменных объектов в JSON, и мне нравится инкапсуляция, которую он обеспечивает.
Единственное возможное решение, которое я нашел, заключается в следующем: динамически создавать файл javascript с локализованными именами ключей в качестве переменных.
<script type="text/javascript">
var name="Nimi";
var title="Otsikko";
var group="Ryhmä";
</script>
Как только я загрузил это, у меня теперь есть вся информация в моем javascript для обработки json! Но есть одна проблема: мой список имен полей является динамическим. Так что на самом деле статический рендеринг в jsp будет выглядеть так:
<c:forEach var="field" values="${fields}">
<fmt:message key="${field.key}"/>: ${field.value}
</c:forEach>
Мне нужно найти все сообщения, указанные в моих messages.properties. Интерфейс Spring MessageSource поддерживает получение сообщений только по ключу. Как я могу получить список имен ключей в моем JSP, который отображает локализованные переменные javascript?