Ho un progetto Spring MVC che utilizza le piastrelle Apache. Ho implementato in modo che i titoli possono essere letti da una fonte messaggio come questo:Supporto di titoli dinamici e tradotti in piastrelle Apache
<tiles-definitions>
<definition name="some-definition" extends="public.base">
<put-attribute name="title" value="some-definition.title" cascade="true" />
</definition>
</tiles-definitions>
E nel mio file di modello (definito da public.base
), faccio la seguente:
<title><spring:message text="" code="${title}" /></title>
Ora questo grandi opere per titoli con traduzione statica, ma voglio anche supportare titoli dinamici, ad es per la visualizzazione di un nome di società. Ho potuto fare in questo modo:
<tiles-definitions>
<definition name="some-definition" extends="public.base">
<put-attribute name="title" expression="${company.name}" />
</definition>
</tiles-definitions>
E poi semplicemente uscita il titolo nel mio modello come questo: <c:out value="${title}" />
. Tuttavia, il problema è che il mio codice si interrompe perché il valore dell'attributo title
non è più una chiave di messaggio. Voglio essere in grado di supportare i seguenti scenari:
- Titoli statici, ad es. "Chi siamo"
- Titoli puramente dinamici, ad es. "$ {company.name}"
- Titoli dinamici con contenuto tradotto, ad es. "Benvenuto in $ {company.name}"
Idealmente, potrei usare il linguaggio delle espressioni all'interno della mia fonte di messaggi, ma non ho potuto farlo funzionare. Ho sperimentato parecchie soluzioni, ma non riesco a trovarne una decente. Se potessi usare il linguaggio delle espressioni all'interno della mia fonte di messaggi, sarebbe facile. Ad esempio, sarebbe possibile fare in qualche modo quanto segue?
some-definition.title = Hello there, ${company.name}
E nel mio modello:
<spring:message text="" code="some-definition.title" var="test" />
<c:out value="${test}" />
È possibile che questo non funziona, in quanto emette ${company.name}
piuttosto che il contenuto effettivo della variabile. C'è un modo per fare qualcosa come questo lavoro? O ci sono altri modi in cui posso supportare gli scenari che ho elencato sopra?
Ho pensato di creare un tag JSTL personalizzato in cui vorrei analizzare un'espressione di stringa in codice Java semplice (la stringa che è stata tradotta), ma ho capito che probabilmente avrei dovuto specificare esplicitamente l'oggetto radice per la "variabile" sostituzione "per funzionare, as documented here. Quindi non sembra una soluzione così dinamica.
Esiste un modo per eseguire questo compito? Ogni aiuto è molto apprezzato!
Ciao Andy, ho usato Thymeleaf (con Piastrelle) e la tua domanda mi ricorda la prima volta che devo trattare con i messaggi: http://www.thymeleaf.org/doc/tutorials/2.1/usingthymeleaf. html # messaggi –
Grazie per il link, @PatrickLC. Hai ragione che è così che lo fai in genere, e l'ho fatto in passato. Tuttavia, non sono ancora sicuro di come farlo nel mio particolare caso d'uso senza dover passare esplicitamente i parametri durante la traduzione del testo. Potrebbe anche non essere possibile fare ciò che voglio, non sono sicuro. – Andy0708