Erste lokalisierte Nachricht von resourceBundle über Annotationen in der Spring-Framework
Ist es möglich, dies zu tun ? Derzeit ist es wie folgt vorgenommen :
<bean id="resource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basenames">
<list>
<value>content.Language</value>
</list>
</property>
</bean>
@Autowired
protected MessageSource resource;
protected String getMessage(String code, Object[] object, Locale locale) {
return resource.getMessage(code, object, locale);
}
Gibt es eine Möglichkeit für Sie zu sein, wie sich Eigenschaften über die @Value-annotation ?
<util:properties id="generals" location="classpath:portlet.properties" />
@Value("#{generals['supported.lang.codes']}")
public String langCodes;
Da Sie zum aufrufen der Methode ist in der Regel in Ordnung, aber zum Beispiel bei unit-Tests, ist Schmerz ... ... Nun, in einigen Fällen, webdriver ist PageObject pattern, wo Objekte keine keine die Initialisierung, das wäre wirklich hilfreich
InformationsquelleAutor der Frage lisak | 2011-06-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube, du vermischt zwei Konzepte:
Property-Dateien enthält Eigenschaften (locale-unabhängigen). Im Frühjahr können Sie geladen werden, beispielsweise über
util:properties
und kann verwendet werden@Value
Anmerkungen.Aber Nachricht resource-bundles (die Basen auf Dateien, die Aussehen wie property-Dateien) Sprache abhängig. Im Frühjahr können Sie laden Sie über
org.springframework.context.support.ResourceBundleMessageSource
. Aber nicht Spritzen in einem String über@Value
. Sie kann nicht Spritzen, weil das@Value
Injektion erfolgt einmal pro bean, die@Value
wird einmal ausgewertet (meisten beim start), und der berechnete Wert injiziert werden. Aber das ist nicht das, was Sie normalerweise benötigen, wenn Sie verwenden die Message-Ressource-Bundles. Denn dann müssen Sie bewerten, den Wert jedes mal, wenn die variable verwendet wird, abhängig von der Sprache eines Benutzers.Aber Sie können es bauen, dargestellt durch Ihre eigene!
Nur Dinge, die Sie brauchen, ist diese Klasse:
Dann können Sie es auf diese Weise:
Um es auszuführen, müssen Sie
<context:spring-configured />
zu schalten AspectJ @Konfigurierbare Unterstützung, und (Das ist wichtig) Sie müssen instantiieren der Ressouce-Bundle Nachricht, die Quelle im gleichen Anwendungskontext (z.B. in web-apps setzen Sie dieReloadableResourceBundleMessageSource
definition in den meisten Fällen in der web-app-Kontext, aber das funktioniert nicht in diesem Fall, weil die MSG-Objekt ist in der "normalen" Anwendungs-Kontext.InformationsquelleAutor der Antwort Ralph
Der Punkt ist, dass diese wirklich nützlich ist nur für Unit-Tests. In der realen Anwendung, Locale ist ein Laufzeit-Informationen, die nicht hardcoded werden in die annotation. Gebietsschema entschieden wird, basierend auf Benutzer-Gebietsschemas in der Runtime.
Btw können Sie einfach implementieren diese selbst, so etwas wie :
Und
InformationsquelleAutor der Antwort lisak