Mam aplikację internetową, która używa Spring MVC. Chciałbym, aby mój interfejs składał się tylko z jednej strony, która pobiera wszystkie dane dynamicznie jako JSON przez AJAX. Mój problem polega na internacjonalizacji. Kiedy renderowanie treści w JSP, mogę używać znaczników JSTL rozwiązać moje klucze (Super-Easy z wiosennym MVC):Spring - otrzymaj wszystkie rozpoznawalne klucze wiadomości
<fmt:message key="name"/>: ${name}
<fmt:message key="title"/>: ${title}
<fmt:message key="group"/>: ${group}
gdy prawidłowo skonfigurowany, to czyni w fińskich lokalizacji jako
Nimi: yay
Otsikko: hoopla
Ryhmä: doo
Teraz , kiedy używam json, mam tylko to przychodzące z serwera:
{
name: "yay",
title: "hoopla",
group: "doo"
}
Nie ma nazwisk! Ale muszę je jakoś zapewnić. Zastanawiałem się nad zmianą nazw do ich zlokalizowanych formularzy lub dodaniem zlokalizowanych nazw klawiszy do wyjścia json (np. Name_localized = "Nimi"), ale obie te opcje wyglądają na złe. Używam json json, aby automatycznie parsować moje obiekty domeny w json i podoba mi się enkapsulacja, którą zapewnia.
Jedyne możliwe rozwiązanie, które wymyśliłem, to: dynamiczne tworzenie pliku javascript ze zlokalizowanymi nazwami kluczy jako zmiennymi.
<script type="text/javascript">
var name="Nimi";
var title="Otsikko";
var group="Ryhmä";
</script>
Gdy mam ten załadowany, teraz mam wszystkie informacje w moim javascript, aby obsłużyć json! Ale jest gotcha: moja lista nazw pól jest dynamiczna. Tak więc statyczne renderowanie w jsp będzie wyglądać tak:
<c:forEach var="field" values="${fields}">
<fmt:message key="${field.key}"/>: ${field.value}
</c:forEach>
Potrzebuję znaleźć wszystkie wiadomości określone w pliku moje messages.properties. Wiosenny interfejs MessageSource obsługuje tylko pobieranie wiadomości według klucza. Jak mogę uzyskać listę nazw klawiszy w moim JSP, który renderuje zlokalizowane zmienne javascript?
Cóż, możesz usunąć odrobinę brzydoty, ustawiając niestandardowe źródło wiadomości jako domyślne. Trudno to wszystko umieścić w komentarzu, ale '' w twojej konfiguracji, a następnie '@Autowired private ExposedResourceBundleMessageSourcemessageSource;' w twojej klasie. –
Patrick
Dla tych, którzy szukają sposobu, w jaki powinieneś uzyskać 'Locale', prawdopodobnie będziesz chciał użyć' LocaleContextHolder.getLocale() '. Spowoduje to przywiązanie ustawień narodowych do wątku, który zwykle jest tym, czego potrzebujesz w środowisku serwlet/wiosna mvc. –