ReloadableResourceBundleMessageSource
können die sprachspezifischen Texte in Java Properties Dateien ausgelagert werden. Die Klasse bietet, wie es ihr Namen schon verspricht, das Erkennen von Änderungen, die zur Laufzeit in der Properties Datei gemacht werden, an die Applikation weiterzuleiten.Als erstes benötigt man die angesprochene Properties Datei, in diesem Beispiel hat sie den Dateinamen
meinePropertyDatei.properties
und enthält zwei Properties namens login.username
und login.password
. Diese beiden Properties Einträge dienen bspw. als Textinhalte für Masken, auf welchen ein Login durchgeführt wird.Nachfolgend sind zwei Properties Dateien abgebildet. Einmal die erwähnte
meinePropertyDatei.properties
, welche als Basis Datei dient und dann eine Property Datei namen meinePropertyDatei_DE.properties
, welche Texte in deutscher Sprache beinhaltet. Wie dieser Postfix im Dateinamen durch Spring behandelt wird, möchte ich zu einem späteren Zeitpunkt in diesem Artikel erklären.[meinePropertyDatei.properties]
1. login.username=Please enter your username
2. login.password=Please enter your password
[meinePropertyDatei_DE.properties]
1. login.username=Bitte geben Sie Ihren Benutzernamen ein
2. login.password=Bitte geben Sie Ihr Passwort ein
Um die Klasse
ReloadableResourceBundleMessageSource
in der eigenen Applikation via Spring verwenden zu können, muss diese im ApplicationContext vermerkt werden. Dabei gibt man den Dateinamen der Basis Properties Datei meinePropertyDatei.properties
ohne Dateiendung (und ohne Postfix) an.[spring.xml]
1. <bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
2. <property name="basenames">
3. <list>
4. <value>meinePropertyDatei</value>
5. </list>
6. </property>
7. </bean>
Damit man nun aus der Applikation auf die Properties Datei bzw. deren Textinhalte zugreifen kann, muss man in der entsprechenden Klasse nur die Interfaceklasse
MessageSourceAware
implementieren.[HibernateUserService.java]
1. public class HibernateUserService implements MessageSourceAware {
2.
3. private MessageSource messageSource;
4.
5. public void setMessageSource(MessageSource messageSource) {
6. this.messageSource = messageSource;
7. }
8.
9. public void printStuff() {
10. System.out.println("Username Text: "
+ messageSource.getMessage("login.username", null, null));
11. System.out.println("Password Text: "
+ messageSource.getMessage("login.password", null, null));
12. System.out.println("Deutscher Benutzername Text: "
+ messageSource.getMessage("login.username", null, Locale.GERMAN));
13. System.out.println("Deutscher Passwort Text: "
+ messageSource.getMessage("login.password", null, Locale.GERMAN));
14. }
15.}
Nun muss man die Klasse
HibernateUserService
nur noch dem Spring Context bekannt machen. [spring.xml]
1. <bean name="userService"
class="ch.minsight.core.java.services.HibernateUserService" />
Wenn man nun das Bean
userService
via dem Spring Application Context anfordert wird die MessageSource automatisch in die Instanz von HibernateUserService implantiert. Dies nennt man ein sogenanntes 'Autowiring', da Spring automatisch erkennt, dass HibernateUserService eine MessageSource benötigt und somit das Bean mit der ID 'messageSource' übergibt. Wie man aus dem Java Sourcecode entnehmen kann, können die Texte unter Bekanntgabe der jeweiligen Locale, sprachabhängig ausgelesen werden.
No comments:
Post a Comment