stefanglase.de

Spring MessageSource mit UTF-8 Encoding

Datum:
Kategorie: Softwareentwicklung
Kommentare: Kommentare

Dieser Artikel erklärt das Vorgehen, wenn bei der Internationalisierung von Spring-Anwendungen die Texte innerhalb von *.properties-Dateien direkt im UTF-8 Encoding abgelegt und nicht auf das im JDK befindliche Werkzeug native2ascii zurückgegriffen werden soll.

Die Konfiguration der Standard-Implementierung im Spring-Umfeld sieht bei der Verwendung eines ResourceBundle im ISO-8859-1 Encoding in der Regel wie folgt aus:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

  <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basename" value="messages"/>
  </bean>

</beans>

Von der häufig verwendeten Standard-Implementierung ResourceBundleMessageSource, welche intern auf die Klasse java.util.ResourceBundle zurückgreift, wird allerdings lediglich das ISO-8859-1 Encoding unterstützt.

Als Alternative bietet sich daher der Einsatz der Klasse ReloadableResourceBundleMessageSource für die Bereitstellung des ResourceBundle an. An dieser Klasse lässt sich eine zusätzliche Eigenschaft defaultEncoding definieren mit deren Hilfe das Standard-Encoding für die zugrunde liegenden MessageBundle-Dateien definiert werden kann.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

  <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basename" value="messages" />
    <property name="defaultEncoding" value="UTF-8" />
  </bean>

</beans>

In unserem ResourceBundle können wir nun unter Verwendung des UTF-8 Encoding beispielsweise “Hallo Welt” unter anderem auf Hebräisch hinterlegen und aus der Anwendung darauf zugreifen.

// messages_en.properties
example = hello world
// messages_de.properties
example = Hallo Welt
// messages_iw.properties
example = שלום העולם

Ein simpler Test mit dem oben konfigurierten ApplicationContext zeigt den Zugriff auf die internationalisierten Texte:

package de.stefanglase.experimental.utf8;

import static org.junit.Assert.assertEquals;

import java.util.Locale;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "/config-application.xml")
public class TestUTF8MessageSource {

    private static final String GERMAN = "Hallo Welt";
    private static final String ENGLISH = "hello world";
    private static final String HEBREW = "שלום העולם";

    @Autowired
    private MessageSource messageSource;

    @Test
    public void testGetMessageForGermanLocale() {
        assertEquals(GERMAN, messageSource.getMessage("example", null, Locale.GERMAN));
    }

    @Test
    public void testGetMessageForEnglishLocale() {
        assertEquals(ENGLISH, messageSource.getMessage("example", null, Locale.ENGLISH));
    }

    @Test
    public void testGetMessageForHebrewLocale() {
        assertEquals(HEBREW, messageSource.getMessage("example", null, new Locale("IW")));
    }

}

Mit der Klasse ReloadableResourceBundleMessageSource ist es zudem auch möglich, Properties-Dateien in unterschiedlichen Encodings zu hinterlegen. Über die Eigenschaft fileEncodings besteht die Möglichkeit, das Encoding dateispezifisch vorzunehmen.

Rad Rebellen Herbsttour 2009

Datum:
Kategorie: Mountainbiking
Kommentare: Kommentare

Wie auch im letzten Herbst luden auch dieses Jahr die Rad Rebellen zur Herbsttour in die Eifel ein. Nach den tollen Touren in der Vergangenheit konnte ich auch dieses Mal nicht widerstehen und machte mich daher am Sonntag mit Rad, Klamotten für jede Wetterlage und Equipment auf den Weg.

Auf halben Wege stoppte ich bei einem Kollegen und nach Verladung meines Bikes in sein Auto ging es dann zu zweit weiter in Richtung Eifel, genauer gesagt nach Bad Münstereifel. Schon knapp eine Stunde vor dem offiziellen Start der Tour waren die Mountainbiker die am stärksten vertretene Spezies vor der Sportwelt Schäfer.

Nach der Aufteilung der knapp 50 Mountainbiker auf drei Gruppen ging es dann zusammen mit 7 Guides um kurz nach 12 Uhr endlich los. Schon auf den ersten 10 Kilometern ging es richtig zur Sache und die Hauptfahrrichtung könnte grob mit den Worten “nach oben” umschrieben werden. Nachdem dann aber etwa 300 Höhenmeter überbrückt waren lockte bei Kilometer 17 schon der Verpflegungsstand mit diversen Leckereien und war so für den ein oder anderen Ansporn genug um die Steigung am Anfang der Tour zu schaffen.

2009-10-12-Radrebellen.gpx

Nach einer ausgedehnten Stärkung, die auch zu einem kleineren Plausch und den ein oder anderen Technikdiskussionen einlud, trennte sich die 35km-Runde von der 45km-Runde, welche noch einen kleinen Abstecher in Richtung Kirchsahr machte.

Die Strecke selber war zwar durch Waldarbeiten und den ein oder anderen Regenfall in den vorangegangen Tagen teilweise etwas aufgeweicht, der Spaß kam aber dennoch nicht zu kurz – schließlich gab es am Ziel auch einen Hochdruckreiniger um das Mountainbike wieder transportfähig zu machen.

Mountainbike vor der notwenigen Reinigung

Alles in allem eine gelungene Tour, die man ausgerüstet mit einem GPS auch problemlos noch einmal nachfahren kann. Am Ziel der Tour wartete dann eine wohlverdiente Dusche und Pasta auf die hungrigen Biker und der schon erwähnte Hochdruckreiniger auf ihren mehr oder weniger verschlammten fahrbaren Untersatz. Einige Impressionen zur Tour findet man im Blog Mountainbiking Weilerswist.

Auch an dieser Stelle von mir noch einmal ein dickes Dankeschön an das Team der Rad Rebellen!

Tour zur Müngstener Brücke

Datum:
Kategorie: Mountainbiking
Kommentare: Kommentare

Gestern lockte das schöne Wetter wieder einmal zu einer Ausfahrt mit dem Mountainbike. Gestartet wurde im Hildener Osten: Von hier aus ging es ein kurzes Stück entlang der Walderstraße bis wir in die Ohligser Heide einbogen. Vorbei am Engelsberger Hof und der Schwanenmühle umfuhren wir den Langenfelder Segelflugplatz. Von hier aus ging es stetig bergan in Richtung Solingen bis wir in das Nackerbachtal einbogen.

2009-09-20-Solingen.gpx

Nach dem Verlassen des Nackerbachtals war es nur noch ein kleines Stück bis zum ehemaligen Solinger Hauptbahnhof, an dem das Cafe Stückgut zu einer kleinen Rast einlud. Anschließend folgten wir den Windungen der Korkenziehertrasse bis nach Solingen Gräfrath zum höchsten Punkt unserer Tour.

Nach einer schnellen Abfahrt hinab ins Tal der Wupper fuhren wir in diesem bis nach Kohlfurth, wo es auf Waldwegen einen schönen Aussichtspunkt mit Sicht auf Schloss Burg zu erklimmen galt. Von hier aus führte eine enge Abfahrt hinab bis zur alten Papiermühle. Ab diesem Punkt folgten wir auf der Westseite der Wupper ihrem Lauf bis zur Müngstener Brücke, wo wir mit der handgetriebenen Schwebefähre die Wupper überquerten. Auf dieser Seite ging es nun weiter bis wir in Eschbach unterhalb von Schloss Burg auskamen und erneut die Flussseite wechselten.

Über Glüder, Balkhausen, Wupperhof und Rödel ging es entlang der Wupper bis zum Haus Nesselrath. Hier verließen wir das Tal der Wupper und fuhren über Gosse und Wiescheid wieder zurück in die Ohligser Heide und zurück nach Hilden. Nach 58 Kilometern und 610 Höhenmetern erreichten wir den Ausgangspunkt dieser abwechslungsreichen und gelungenen Tour.