Mam projekt Spring MVC, który wykorzystuje płytki Apache. I wprowadziły tak że tytuły mogą być odczytane ze źródła wiadomości jak ta:Obsługa dynamicznych i przetłumaczonych tytułów w Apache Tiles
<tiles-definitions>
<definition name="some-definition" extends="public.base">
<put-attribute name="title" value="some-definition.title" cascade="true" />
</definition>
</tiles-definitions>
I w moim pliku szablonu (zdefiniowanej przez public.base
), mam następujące:
<title><spring:message text="" code="${title}" /></title>
Teraz to działa świetnie dla statycznych przetłumaczonych tytułów, ale chcę też wspierać dynamiczne tytuły, np do wyświetlania nazwy firmy. mogę to zrobić tak:
<tiles-definitions>
<definition name="some-definition" extends="public.base">
<put-attribute name="title" expression="${company.name}" />
</definition>
</tiles-definitions>
a następnie po prostu wyjście tytuł w moim szablonu takich jak to: <c:out value="${title}" />
. Jednak problem polega na tym, że mój kod ulega uszkodzeniu, ponieważ wartość atrybutu title
nie jest już kluczem komunikatu. Chcę mieć możliwość obsługi następujących scenariuszy:
- Statyczne tytuły, np. "O nas"
- Czysto dynamiczne tytuły, np. "$ {company.name}"
- Dynamiczne tytuły z przetłumaczoną treścią, np. "Witamy w $ {nazwa firmy}"
Idealnie mógłbym użyć języka wyrażenia w obrębie mojego źródła wiadomości, ale nie mogłem tego zrobić. Wiele eksperymentowałem z różnymi rozwiązaniami, ale nie mogę znaleźć przyzwoitego. Gdybym mógł użyć języka wyrażenia w moim źródle wiadomości, byłoby to łatwe. Na przykład, czy w jakiś sposób można by wykonać następujące czynności?
some-definition.title = Hello there, ${company.name}
I w moim szablonu:
<spring:message text="" code="some-definition.title" var="test" />
<c:out value="${test}" />
Powyższe nie działa, jak wyprowadza ${company.name}
zamiast rzeczywistej zawartości zmiennej. Czy istnieje sposób na zrobienie czegoś podobnego do tej pracy? Czy są jakieś inne sposoby, w jakie mogę wesprzeć scenariusze wymienione powyżej?
Pomyślałem o stworzeniu niestandardowego znacznika JSTL, w którym chciałbym parsować wyrażenie tekstowe w zwykłym kodzie Java (przetłumaczonym ciągu), ale zdałem sobie sprawę, że prawdopodobnie musiałbym jawnie określić obiekt główny dla "zmiennej" zamiennik "do pracy, as documented here. Wtedy nie wydaje się tak dynamicznym rozwiązaniem.
Czy jest jakiś sposób, w jaki mogę wykonać to zadanie? Każda pomoc jest doceniana!
Witaj, Andy, użyłem Thymeleaf (z Kafelkami) i twoje pytanie przypomina mi o tym, że po raz pierwszy mam do czynienia z wiadomościami: http://www.thymeleaf.org/doc/tutorials/2.1/usingthymaf. html # messages –
Dziękuję za link, @PatrickLC. Masz rację, że tak właśnie robisz i robiłem to w przeszłości. Jednak nadal nie jestem pewien, jak to zrobić w moim konkretnym przypadku użycia, bez konieczności jawnego przekazywania parametrów podczas tłumaczenia tekstu. Może nie być nawet możliwe robienie tego, co chcę, nie jestem pewien. – Andy0708